ML z Pythonem - wybór funkcji danych
W poprzednim rozdziale szczegółowo omówiliśmy, jak wstępnie przetwarzać i przygotowywać dane do uczenia maszynowego. W tym rozdziale przyjrzyjmy się szczegółowo doborowi cech danych i różnymi aspektami z tym związanymi.
Znaczenie wyboru funkcji danych
Wydajność modelu uczenia maszynowego jest wprost proporcjonalna do funkcji danych używanych do jego trenowania. Na wydajność modelu ML wpłynie to negatywnie, jeśli dostarczone mu funkcje danych są nieistotne. Z drugiej strony użycie odpowiednich funkcji danych może zwiększyć dokładność modelu ML, zwłaszcza regresji liniowej i logistycznej.
Teraz pojawia się pytanie, czym jest automatyczny wybór funkcji? Można go zdefiniować jako proces, za pomocą którego wybieramy te cechy w naszych danych, które są najbardziej odpowiednie dla zmiennej wyjściowej lub predykcyjnej, którymi jesteśmy zainteresowani. Nazywa się to również wyborem atrybutów.
Poniżej przedstawiono niektóre korzyści wynikające z automatycznego wyboru funkcji przed modelowaniem danych -
Dokonanie wyboru elementów przed modelowaniem danych zmniejszy nadmierne dopasowanie.
Dokonanie wyboru cech przed modelowaniem danych zwiększy dokładność modelu ML.
Dokonanie wyboru funkcji przed modelowaniem danych skróci czas szkolenia
Techniki wyboru funkcji
Poniżej przedstawiono techniki automatycznego wyboru funkcji, których możemy użyć do modelowania danych ML w Pythonie -
Wybór jednowymiarowy
Ta technika wyboru cech jest bardzo przydatna przy wybieraniu tych cech, przy pomocy testów statystycznych, mających najsilniejszy związek ze zmiennymi predykcji. Możemy zaimplementować technikę jednoczynnikowego wyboru cech za pomocą SelectKBest0class biblioteki scikit-learn Python.
Example
W tym przykładzie wykorzystamy zbiór danych Pima Indians Diabetes do wybrania 4 atrybutów o najlepszych cechach za pomocą testu statystycznego chi-kwadrat.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Następnie podzielimy tablicę na komponenty wejściowe i wyjściowe -
X = array[:,0:8]
Y = array[:,8]
Poniższe wiersze kodu wybiorą najlepsze funkcje z zestawu danych -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
Możemy również podsumować dane wyjściowe według naszego wyboru. Tutaj ustawiamy dokładność na 2 i pokazujemy 4 atrybuty danych z najlepszymi funkcjami wraz z najlepszym wynikiem każdego atrybutu -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]
]
Rekurencyjna eliminacja funkcji
Jak sama nazwa wskazuje, technika wyboru cech RFE (rekurencyjna eliminacja cech) usuwa atrybuty rekurencyjnie i buduje model z pozostałymi atrybutami. Możemy zaimplementować technikę wyboru cech RFE przy pomocy klasy RFE biblioteki scikit-learn Python.
Przykład
W tym przykładzie użyjemy RFE z algorytmem regresji logistycznej, aby wybrać 3 najlepsze atrybuty o najlepszych cechach z zestawu danych Pima Indians Diabetes do.
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Następnie podzielimy tablicę na komponenty wejściowe i wyjściowe -
X = array[:,0:8]
Y = array[:,8]
Poniższe wiersze kodu wybiorą najlepsze funkcje ze zbioru danych -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
Wynik
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
Jak widać na powyższym wyjściu, RFE wybiera preg, mass i pedi jako pierwsze 3 najlepsze cechy. Na wyjściu są oznaczone jako 1.
Analiza głównych składników (PCA)
PCA, ogólnie nazywana techniką redukcji danych, jest bardzo użyteczną techniką selekcji cech, ponieważ wykorzystuje algebrę liniową do przekształcenia zbioru danych w formę skompresowaną. Możemy zaimplementować technikę wyboru cech PCA za pomocą klasy PCA biblioteki scikit-learn Python. W wyniku możemy wybrać liczbę głównych składników.
Przykład
W tym przykładzie użyjemy PCA do wybrania 3 najlepszych głównych komponentów ze zbioru danych Pima Indians Diabetes.
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Następnie podzielimy tablicę na komponenty wejściowe i wyjściowe -
X = array[:,0:8]
Y = array[:,8]
Poniższe wiersze kodu wyodrębnią funkcje z zestawu danych -
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
Wynik
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
[
-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
]
[
2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
]
[
-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
]
]
Z powyższego wyniku możemy zauważyć, że 3 główne komponenty są w niewielkim stopniu podobne do danych źródłowych.
Znaczenie funkcji
Jak sama nazwa wskazuje, do wyboru cech ważności używana jest technika ważności cech. Zasadniczo używa wyszkolonego nadzorowanego klasyfikatora do wybierania funkcji. Możemy zaimplementować tę technikę wyboru funkcji za pomocą klasy ExtraTreeClassifier biblioteki scikit-learn Python.
Przykład
W tym przykładzie użyjemy ExtraTreeClassifier do wybrania funkcji ze zbioru danych Pima Indians Diabetes.
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
Następnie podzielimy tablicę na komponenty wejściowe i wyjściowe -
X = array[:,0:8]
Y = array[:,8]
Poniższe wiersze kodu wyodrębnią funkcje z zestawu danych -
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
Wynik
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
Na podstawie danych wyjściowych możemy zauważyć, że dla każdego atrybutu są oceny. Im wyższy wynik, tym większe znaczenie tego atrybutu.