Scikit Learn - Dimensionality Reduction utilizzando PCA

Riduzione della dimensionalità, un metodo di apprendimento automatico non supervisionato viene utilizzato per ridurre il numero di variabili di funzionalità per ciascun campione di dati selezionando un insieme di funzionalità principali. Principal Component Analysis (PCA) è uno degli algoritmi popolari per la riduzione della dimensionalità.

PCA esatto

Principal Component Analysis (PCA) viene utilizzato per la riduzione della dimensionalità lineare utilizzando Singular Value Decomposition(SVD) dei dati per proiettarli in uno spazio dimensionale inferiore. Durante la decomposizione tramite PCA, i dati di input vengono centrati ma non scalati per ciascuna funzione prima dell'applicazione dell'SVD.

La libreria Scikit-learn ML fornisce sklearn.decomposition.PCAmodulo implementato come oggetto trasformatore che apprende n componenti nel suo metodo fit (). Può anche essere utilizzato su nuovi dati per proiettarli su questi componenti.

Esempio

L'esempio seguente utilizzerà il modulo sklearn.decomposition.PCA per trovare i migliori 5 componenti principali dal set di dati del diabete degli indiani Pima.

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_)

Produzione

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]
]

PCA incrementale

Incremental Principal Component Analysis (IPCA) viene utilizzato per affrontare la più grande limitazione dell'analisi dei componenti principali (PCA) e cioè PCA supporta solo l'elaborazione in batch, significa che tutti i dati di input da elaborare devono essere contenuti nella memoria.

La libreria Scikit-learn ML fornisce sklearn.decomposition.IPCA modulo che rende possibile implementare Out-of-Core PCA sia utilizzando il suo partial_fit metodo su blocchi di dati recuperati in modo sequenziale o abilitando l'uso di np.memmap, un file mappato in memoria, senza caricare l'intero file in memoria.

Come per la PCA, durante la decomposizione tramite IPCA, i dati di input vengono centrati ma non ridimensionati per ciascuna funzione prima di applicare l'SVD.

Esempio

L'esempio seguente userà sklearn.decomposition.IPCA modulo su Sklearn digit dataset.

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

Produzione

(1797, 10)

Qui, possiamo adattarci parzialmente a batch di dati più piccoli (come abbiamo fatto su 100 per batch) oppure puoi lasciare che il file fit() funzione per dividere i dati in batch.

PCA del kernel

Kernel Principal Component Analysis, un'estensione del PCA, ottiene una riduzione della dimensionalità non lineare utilizzando i kernel. Supporta entrambitransform and inverse_transform.

La libreria Scikit-learn ML fornisce sklearn.decomposition.KernelPCA modulo.

Esempio

L'esempio seguente userà sklearn.decomposition.KernelPCAmodulo su Sklearn digit dataset. Stiamo usando il kernel sigmoide.

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

Produzione

(1797, 10)

PCA utilizzando SVD randomizzato

L'analisi dei componenti principali (PCA) utilizzando SVD randomizzata viene utilizzata per proiettare i dati in uno spazio di dimensioni inferiori preservando la maggior parte della varianza eliminando il vettore singolare dei componenti associati a valori singolari inferiori. Qui, ilsklearn.decomposition.PCA modulo con il parametro opzionale svd_solver=’randomized’ sarà molto utile.

Esempio

L'esempio seguente userà sklearn.decomposition.PCA modulo con il parametro opzionale svd_solver = 'randomized' per trovare i migliori 7 componenti principali dal dataset di 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_)

Produzione

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]
]