Hauptkomponentenanalyse mit Kernel PCA

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Die Hauptkomponentenanalyse (Principal Component Analysis, PCA) ist eine Technik, die verwendet wird, um die Dimension eines Datensatzes zu reduzieren, während die meiste ursprüngliche Variation beibehalten wird. Die PCA ist jedoch eine lineare Methode und kann nicht gut funktionieren, wenn die Daten eine nicht-lineare Struktur aufweisen. In solchen Fällen kann die Kernel PCA anstelle der PCA verwendet werden. In diesem Lab werden wir die Unterschiede zwischen PCA und Kernel PCA demonstrieren und zeigen, wie man sie verwendet.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und den Jupyter Notebook-Access für die Übung zu erhalten.

Manchmal müssen Sie einige Sekunden warten, bis das Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen im Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49177{{"Hauptkomponentenanalyse mit Kernel PCA"}} sklearn/decomposition -.-> lab-49177{{"Hauptkomponentenanalyse mit Kernel PCA"}} sklearn/datasets -.-> lab-49177{{"Hauptkomponentenanalyse mit Kernel PCA"}} ml/sklearn -.-> lab-49177{{"Hauptkomponentenanalyse mit Kernel PCA"}} end

Lade den Datensatz

Wir werden einen Datensatz aus zwei geschachtelten Kreisen mit der Funktion make_circles aus sklearn.datasets erstellen.

from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split

X, y = make_circles(n_samples=1_000, factor=0.3, noise=0.05, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

Visualisiere den Datensatz

Wir werden den erzeugten Datensatz mit matplotlib darstellen, um ihn zu visualisieren.

import matplotlib.pyplot as plt

_, (train_ax, test_ax) = plt.subplots(ncols=2, sharex=True, sharey=True, figsize=(8, 4))

train_ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train)
train_ax.set_ylabel("Feature #1")
train_ax.set_xlabel("Feature #0")
train_ax.set_title("Training data")

test_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test)
test_ax.set_xlabel("Feature #0")
_ = test_ax.set_title("Testing data")

Verwende die PCA, um den Datensatz zu projizieren

Die PCA wird verwendet, um den Datensatz in einen neuen Raum zu projizieren, in dem die meiste ursprüngliche Variation erhalten bleibt.

from sklearn.decomposition import PCA

pca = PCA(n_components=2)

X_test_pca = pca.fit(X_train).transform(X_test)

Verwende die Kernel PCA, um den Datensatz zu projizieren

Die Kernel PCA wird verwendet, um den Datensatz in einen neuen Raum zu projizieren, in dem die meiste ursprüngliche Variation erhalten bleibt, aber auch nicht-lineare Strukturen ermöglicht.

from sklearn.decomposition import KernelPCA

kernel_pca = KernelPCA(
    n_components=None, kernel="rbf", gamma=10, fit_inverse_transform=True, alpha=0.1
)

X_test_kernel_pca = kernel_pca.fit(X_train).transform(X_test)

Visualisiere die PCA- und Kernel-PCA-Projektionen

Wir werden die PCA- und Kernel-PCA-Projektionen darstellen, um die Unterschiede zwischen ihnen zu visualisieren.

fig, (orig_data_ax, pca_proj_ax, kernel_pca_proj_ax) = plt.subplots(
    ncols=3, figsize=(14, 4)
)

orig_data_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test)
orig_data_ax.set_ylabel("Feature #1")
orig_data_ax.set_xlabel("Feature #0")
orig_data_ax.set_title("Testing data")

pca_proj_ax.scatter(X_test_pca[:, 0], X_test_pca[:, 1], c=y_test)
pca_proj_ax.set_ylabel("Principal component #1")
pca_proj_ax.set_xlabel("Principal component #0")
pca_proj_ax.set_title("Projection of testing data\n using PCA")

kernel_pca_proj_ax.scatter(X_test_kernel_pca[:, 0], X_test_kernel_pca[:, 1], c=y_test)
kernel_pca_proj_ax.set_ylabel("Principal component #1")
kernel_pca_proj_ax.set_xlabel("Principal component #0")
_ = kernel_pca_proj_ax.set_title("Projection of testing data\n using KernelPCA")

Projektieren Sie die Kernel-PCA-Projektion zurück in den ursprünglichen Raum

Wir werden die inverse_transform-Methode der Kernel PCA verwenden, um die Kernel-PCA-Projektion zurück in den ursprünglichen Raum zu projizieren.

X_reconstructed_kernel_pca = kernel_pca.inverse_transform(kernel_pca.transform(X_test))

Visualisiere den rekonstruierten Datensatz

Wir werden den ursprünglichen Datensatz und den rekonstruierten Datensatz darstellen, um sie zu vergleichen.

fig, (orig_data_ax, pca_back_proj_ax, kernel_pca_back_proj_ax) = plt.subplots(
    ncols=3, sharex=True, sharey=True, figsize=(13, 4)
)

orig_data_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test)
orig_data_ax.set_ylabel("Feature #1")
orig_data_ax.set_xlabel("Feature #0")
orig_data_ax.set_title("Original test data")

pca_back_proj_ax.scatter(X_reconstructed_pca[:, 0], X_reconstructed_pca[:, 1], c=y_test)
pca_back_proj_ax.set_xlabel("Feature #0")
pca_back_proj_ax.set_title("Reconstruction via PCA")

kernel_pca_back_proj_ax.scatter(
    X_reconstructed_kernel_pca[:, 0], X_reconstructed_kernel_pca[:, 1], c=y_test
)
kernel_pca_back_proj_ax.set_xlabel("Feature #0")
_ = kernel_pca_back_proj_ax.set_title("Reconstruction via KernelPCA")

Zusammenfassung

In diesem Lab haben wir die Unterschiede zwischen PCA und Kernel PCA kennengelernt. Wir haben die PCA und die Kernel PCA verwendet, um einen Datensatz in einen neuen Raum zu projizieren und die Projektionen visualisiert. Wir haben auch die Kernel PCA verwendet, um die Projektion zurück in den ursprünglichen Raum zu projizieren und sie mit dem ursprünglichen Datensatz zu vergleichen.