Vergleich von Manifold Learning

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

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49091{{"Vergleich von Manifold Learning"}} end

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.