Scikit Learn - Dimensionsreduzierung mit PCA

Bei der Dimensionsreduzierung wird eine unbeaufsichtigte Methode des maschinellen Lernens verwendet, um die Anzahl der Merkmalsvariablen für jede Datenprobe zu reduzieren und einen Satz von Hauptmerkmalen auszuwählen. Die Hauptkomponentenanalyse (PCA) ist einer der beliebtesten Algorithmen zur Dimensionsreduzierung.

Genaue PCA

Principal Component Analysis (PCA) wird zur linearen Dimensionsreduktion mit verwendet Singular Value Decomposition(SVD) der Daten, um sie in einen Raum mit niedrigeren Dimensionen zu projizieren. Während der Zerlegung mit PCA werden die Eingabedaten zentriert, aber nicht für jedes Merkmal skaliert, bevor die SVD angewendet wird.

Die Scikit-Learn ML-Bibliothek bietet sklearn.decomposition.PCAModul, das als Transformatorobjekt implementiert ist und in seiner fit () -Methode n Komponenten lernt. Es kann auch für neue Daten verwendet werden, um sie auf diese Komponenten zu projizieren.

Beispiel

Im folgenden Beispiel wird das Modul sklearn.decomposition.PCA verwendet, um die besten 5 Hauptkomponenten aus dem Pima Indians Diabetes-Datensatz zu finden.

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

Ausgabe

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

Inkrementelle PCA

Incremental Principal Component Analysis (IPCA) wird verwendet, um die größte Einschränkung der Hauptkomponentenanalyse (PCA) zu beheben. Das heißt, PCA unterstützt nur die Stapelverarbeitung. Dies bedeutet, dass alle zu verarbeitenden Eingabedaten in den Speicher passen sollten.

Die Scikit-Learn ML-Bibliothek bietet sklearn.decomposition.IPCA Modul, das es ermöglicht, Out-of-Core-PCA entweder mithilfe seines zu implementieren partial_fit Methode zum sequentiellen Abrufen von Datenblöcken oder durch Aktivieren der Verwendung von np.memmap, eine Speicherzuordnungsdatei, ohne die gesamte Datei in den Speicher zu laden.

Wie bei PCA werden bei der Zerlegung mithilfe von IPCA die Eingabedaten zentriert, jedoch nicht für jedes Merkmal skaliert, bevor die SVD angewendet wird.

Beispiel

Das folgende Beispiel wird verwendet sklearn.decomposition.IPCA Modul zum Sklearn-Ziffern-Datensatz.

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

Ausgabe

(1797, 10)

Hier können wir teilweise auf kleinere Datenstapel passen (wie bei 100 pro Stapel) oder Sie können das zulassen fit() Funktion zum Aufteilen der Daten in Stapel.

Kernel PCA

Die Kernel-Hauptkomponentenanalyse, eine Erweiterung von PCA, erzielt eine nichtlineare Dimensionsreduktion mithilfe von Kerneln. Es unterstützt beidetransform and inverse_transform.

Die Scikit-Learn ML-Bibliothek bietet sklearn.decomposition.KernelPCA Modul.

Beispiel

Das folgende Beispiel wird verwendet sklearn.decomposition.KernelPCAModul zum Sklearn-Ziffern-Datensatz. Wir verwenden Sigmoid-Kernel.

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

Ausgabe

(1797, 10)

PCA mit randomisierter SVD

Die Hauptkomponentenanalyse (PCA) unter Verwendung einer randomisierten SVD wird verwendet, um Daten in einen Raum mit niedrigeren Dimensionen zu projizieren, wobei der größte Teil der Varianz erhalten bleibt, indem der Singularvektor von Komponenten gelöscht wird, die mit niedrigeren Singularwerten assoziiert sind. Hier dassklearn.decomposition.PCA Modul mit dem optionalen Parameter svd_solver=’randomized’ wird sehr nützlich sein.

Beispiel

Das folgende Beispiel wird verwendet sklearn.decomposition.PCA Modul mit dem optionalen Parameter svd_solver = 'randomisiert', um die besten 7 Hauptkomponenten aus dem Pima Indians Diabetes-Datensatz zu finden.

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

Ausgabe

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