Einführung
In diesem Lab werden wir verschiedene Manifold Learning-Algorithmen vergleichen, um die nichtlineare Dimensionsreduzierung durchzuführen. Der Zweck hiervon ist es, die Dimension der Datensatzes zu reduzieren, während die wesentlichen Merkmale der ursprünglichen Daten beibehalten werden.
Wir werden den S-curve-Datensatz verwenden, der ein häufig verwendeter Datensatz zur Dimensionsreduzierung ist. Wir werden Algorithmen wie Locally Linear Embeddings, Isomap Embedding, Multidimensional Scaling, Spectral Embedding und T-distributed Stochastic Neighbor Embedding verwenden.
VM-Tipps
Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Datensatzvorbereitung
Wir beginnen mit der Erzeugung des S-curve-Datensatzes.
import matplotlib.pyplot as plt
from matplotlib import ticker
## unused but required import for doing 3d projections with matplotlib < 3.2
import mpl_toolkits.mplot3d ## noqa: F401
from sklearn import manifold, datasets
n_samples = 1500
S_points, S_color = datasets.make_s_curve(n_samples, random_state=0)
Lokale lineare Einbettungen
Lokale lineare Einbettung (LLE) ist eine Reihe lokaler Hauptkomponentenanalysen, die global verglichen werden, um die beste nichtlineare Einbettung zu finden. Wir werden vier verschiedene Methoden der LLE verwenden, nämlich Standard, Lokale Tangentialraumausrichtung, Hessische Eigenkarte und Modifizierte lokale lineare Einbettung.
params = {
"n_neighbors": n_neighbors,
"n_components": n_components,
"eigen_solver": "auto",
"random_state": 0,
}
lle_standard = manifold.LocallyLinearEmbedding(method="standard", **params)
S_standard = lle_standard.fit_transform(S_points)
lle_ltsa = manifold.LocallyLinearEmbedding(method="ltsa", **params)
S_ltsa = lle_ltsa.fit_transform(S_points)
lle_hessian = manifold.LocallyLinearEmbedding(method="hessian", **params)
S_hessian = lle_hessian.fit_transform(S_points)
lle_mod = manifold.LocallyLinearEmbedding(method="modified", **params)
S_mod = lle_mod.fit_transform(S_points)
Isomap-Einbettung
Isomap sucht eine Einbettung in einer niedrigeren Dimension, die die geodätischen Distanzen zwischen allen Punkten beibehält.
isomap = manifold.Isomap(n_neighbors=n_neighbors, n_components=n_components, p=1)
S_isomap = isomap.fit_transform(S_points)
Mehrdimensionale Skalierung
Mehrdimensionale Skalierung (MDS) sucht eine Darstellung der Daten in einer niedrigen Dimension, bei der die Distanzen die Distanzen im ursprünglichen hochdimensionalen Raum gut widerspiegeln.
md_scaling = manifold.MDS(
n_components=n_components,
max_iter=50,
n_init=4,
random_state=0,
normalized_stress=False,
)
S_scaling = md_scaling.fit_transform(S_points)
Spektrale Einbettung zur nichtlinearen Dimensionsreduzierung
Diese Implementierung verwendet Laplace-Eigenkarten, die eine Darstellung der Daten in einer niedrigen Dimension mithilfe einer spektralen Zerlegung der Graphen-Laplace-Operator findet.
spectral = manifold.SpectralEmbedding(
n_components=n_components, n_neighbors=n_neighbors
)
S_spectral = spectral.fit_transform(S_points)
T-verteilte stochastische Nachbar-Einbettung
Es wandelt Ähnlichkeiten zwischen Datenpunkten in bedingte Wahrscheinlichkeiten um und versucht, die Kullback-Leibler-Divergenz zwischen den bedingten Wahrscheinlichkeiten der Einbettung in einer niedrigen Dimension und der Daten in einer hohen Dimension zu minimieren.
t_sne = manifold.TSNE(
n_components=n_components,
perplexity=30,
init="random",
n_iter=250,
random_state=0,
)
S_t_sne = t_sne.fit_transform(S_points)
Zusammenfassung
Manifold Learning ist ein Ansatz zur nichtlinearen Dimensionsreduzierung. In diesem Lab haben wir verschiedene Manifold Learning-Algorithmen wie Locally Linear Embeddings, Isomap-Einbettung, Mehrdimensionale Skalierung, Spektrale Einbettung und T-verteilte stochastische Nachbar-Einbettung verglichen, um die nichtlineare Dimensionsreduzierung auf dem S-Kurve-Datensatz durchzuführen.