Scikit Learn - redukcja wymiarowości za pomocą PCA

Redukcja wymiarowości, nienadzorowana metoda uczenia maszynowego jest używana do zmniejszania liczby zmiennych cech dla każdej próbki danych, wybierając zestaw głównych cech. Analiza głównych składowych (PCA) to jeden z popularnych algorytmów redukcji wymiarowości.

Dokładne PCA

Principal Component Analysis (PCA) służy do redukcji wymiarowości liniowej za pomocą Singular Value Decomposition(SVD) danych, aby rzutować je na przestrzeń o niższych wymiarach. Podczas dekompozycji za pomocą PCA dane wejściowe są wyśrodkowane, ale nie skalowane dla każdej funkcji przed zastosowaniem SVD.

Biblioteka Scikit-learn ML zapewnia sklearn.decomposition.PCAmoduł zaimplementowany jako obiekt transformatora, który uczy się n komponentów w swojej metodzie fit (). Można go również użyć na nowych danych, aby wyświetlić je na tych komponentach.

Przykład

Poniższy przykład użyje modułu sklearn.decomposition.PCA do znalezienia 5 najlepszych głównych komponentów ze zbioru danych Pima Indians Diabetes.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', ‘class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 5)
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Wynik

Explained Variance: [0.88854663 0.06159078 0.02579012 0.01308614 0.00744094]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
]

Przyrostowe PCA

Incremental Principal Component Analysis (IPCA) służy do rozwiązania największego ograniczenia analizy głównych składników (PCA), a mianowicie PCA obsługuje tylko przetwarzanie wsadowe, co oznacza, że ​​wszystkie dane wejściowe do przetworzenia powinny zmieścić się w pamięci.

Biblioteka Scikit-learn ML zapewnia sklearn.decomposition.IPCA moduł, który umożliwia implementację Out-of-Core PCA za pomocą jego partial_fit metoda na sekwencyjnie pobieranych fragmentach danych lub włączając użycie np.memmap, plik mapowany w pamięci, bez ładowania całego pliku do pamięci.

Podobnie jak w przypadku PCA, podczas dekompozycji za pomocą IPCA dane wejściowe są wyśrodkowane, ale nie skalowane dla każdej funkcji przed zastosowaniem SVD.

Przykład

Poniższy przykład użyje sklearn.decomposition.IPCA moduł dotyczący cyfrowego zbioru danych Sklearn.

from sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
X, _ = load_digits(return_X_y = True)
transformer = IncrementalPCA(n_components = 10, batch_size = 100)
transformer.partial_fit(X[:100, :])
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Wynik

(1797, 10)

Tutaj możemy częściowo zmieścić się na mniejszych partiach danych (tak jak zrobiliśmy to w przypadku 100 na partię) lub możesz pozwolić fit() funkcja, aby podzielić dane na partie.

Kernel PCA

Kernel Principal Component Analysis, rozszerzenie PCA, umożliwia redukcję nieliniowych wymiarów przy użyciu jądra. Obsługuje obatransform and inverse_transform.

Biblioteka Scikit-learn ML zapewnia sklearn.decomposition.KernelPCA moduł.

Przykład

Poniższy przykład użyje sklearn.decomposition.KernelPCAmoduł dotyczący cyfrowego zbioru danych Sklearn. Używamy jądra sigmoidalnego.

from sklearn.datasets import load_digits
from sklearn.decomposition import KernelPCA
X, _ = load_digits(return_X_y = True)
transformer = KernelPCA(n_components = 10, kernel = 'sigmoid')
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Wynik

(1797, 10)

PCA przy użyciu randomizowanego SVD

Analiza głównych składowych (PCA) przy użyciu randomizowanego SVD służy do rzutowania danych na przestrzeń o niższych wymiarach, zachowując większość wariancji poprzez usunięcie wektora osobliwego składników powiązanych z niższymi wartościami osobliwymi. Tutajsklearn.decomposition.PCA moduł z opcjonalnym parametrem svd_solver=’randomized’ będzie bardzo przydatne.

Przykład

Poniższy przykład użyje sklearn.decomposition.PCA moduł z opcjonalnym parametrem svd_solver = 'randomized', aby znaleźć 7 najlepszych głównych komponentów ze zbioru danych Pima Indians Diabetes.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 7,svd_solver = 'randomized')
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Wynik

Explained Variance: [8.88546635e-01 6.15907837e-02 2.57901189e-02 1.30861374e-027.44093864e-03 3.02614919e-03 5.12444875e-04]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
   [-5.04730888e-03 5.07391813e-02 7.56365525e-02 2.21363068e-01-6.13326472e-03 -9.70776708e-01 -2.02903702e-03 -1.51133239e-02]
   [ 9.86672995e-01 8.83426114e-04 -1.22975947e-03 -3.76444746e-041.42307394e-03 -2.73046214e-03 -6.34402965e-03 -1.62555343e-01]
]