scikit-learn
Redukcja wymiarów (wybór funkcji)
Szukaj…
Zmniejszenie wymiaru dzięki analizie głównych składników
Analiza głównych składników wyszukuje sekwencje liniowych kombinacji cech. Pierwsza kombinacja liniowa maksymalizuje wariancję cech (z zastrzeżeniem ograniczenia jednostkowego). Każda z następujących kombinacji liniowych maksymalizuje wariancję cech w podprzestrzeni ortogonalnej do tej, którą obejmują poprzednie kombinacje liniowe.
Powszechną techniką redukcji wymiarów jest stosowanie tylko k pierwszych takich kombinacji liniowych. Załóżmy, że cechy są macierzą X z n rzędów i m kolumn. Pierwsze k kombinacji liniowych tworzy macierz β k m rzędów i k kolumn. Produkt X β ma n wierszy ik kolumn. Tak więc uzyskaną macierz β k można uznać za redukcję z wymiarów m do k , zachowując części o dużej wariancji oryginalnej macierzy X.
W scikit-learn
PCA wykonuje się za pomocą sklearn.decomposition.PCA
. Załóżmy na przykład, że zaczynamy od macierzy 100 X 7, skonstruowanej w taki sposób, że wariancja jest zawarta tylko w dwóch pierwszych kolumnach (poprzez zmniejszenie ostatnich 5 kolumn):
import numpy as np
np.random.seed(123) # we'll set a random seed so that our results are reproducible
X = np.hstack((np.random.randn(100, 2) + (10, 10), 0.001 * np.random.randn(100, 5)))
Zróbmy redukcję do 2 wymiarów:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
Teraz sprawdźmy wyniki. Po pierwsze, oto kombinacje liniowe:
pca.components_
# array([[ -2.84271217e-01, -9.58743893e-01, -8.25412629e-05,
# 1.96237855e-05, -1.25862328e-05, 8.27127496e-05,
# -9.46906600e-05],
# [ -9.58743890e-01, 2.84271223e-01, -7.33055823e-05,
# -1.23188872e-04, -1.82458739e-05, 5.50383246e-05,
# 1.96503690e-05]])
Zauważ, że pierwsze dwa składniki w każdym wektorze są o kilka rzędów wielkości większe niż pozostałe, co pokazuje, że PCA rozpoznało, że wariancja jest zawarta głównie w pierwszych dwóch kolumnach.
Aby sprawdzić współczynnik wariancji wyjaśniony przez ten PCA, możemy zbadać pca.explained_variance_ratio_
:
pca.explained_variance_ratio_
# array([ 0.57039059, 0.42960728])