多様体学習の比較

Beginner

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

はじめに

この実験では、非線形次元削減を行うためにさまざまな多様体学習アルゴリズムを比較します。この目的は、元のデータの本質的な特徴を維持したまま、データセットの次元を削減することです。

次元削減に一般的に使用される S 曲線データセットを使用します。局所的線形埋め込み、Isomap 埋め込み、多次元尺度法、スペクトラル埋め込み、および T 分布確率的近傍埋め込みなどのアルゴリズムを使用します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

データセットの準備

まず、S 曲線データセットを生成します。

import matplotlib.pyplot as plt
from matplotlib import ticker

## matplotlib < 3.2 で 3D 投影を行うために必要なインポートですが、使用しません
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)

局所的線形埋め込み

局所的線形埋め込み(Locally Linear Embedding:LLE)は、グローバルに比較されて最適な非線形埋め込みを見つけるための一連の局所的主成分分析です。ここでは、LLE の 4 つの異なる方法、つまり、標準的な方法、局所接空間整列、ヘッシアン固有写像、および修正された局所的線形埋め込みを使用します。

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 埋め込み

Isomap は、すべての点間の測地距離を維持する低次元埋め込みを求めます。

isomap = manifold.Isomap(n_neighbors=n_neighbors, n_components=n_components, p=1)
S_isomap = isomap.fit_transform(S_points)

多次元尺度法

多次元尺度法(Multidimensional scaling:MDS)は、元の高次元空間における距離を十分に反映する低次元表現を求めます。

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)

非線形次元削減のためのスペクトラル埋め込み

この実装では、グラフ・ラプラシアンのスペクトル分解を用いてデータの低次元表現を見つける、ラプラシアン固有写像を使用します。

spectral = manifold.SpectralEmbedding(
    n_components=n_components, n_neighbors=n_neighbors
)
S_spectral = spectral.fit_transform(S_points)

T 分布確率近傍埋め込み

これは、データポイント間の類似性を結合確率に変換し、低次元埋め込みと高次元データの結合確率間のクルバック・ライブラー収束を最小化しようとします。

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)

まとめ

多様体学習は、非線形次元削減のアプローチです。この実験では、局所的線形埋め込み、Isomap 埋め込み、多次元尺度法、スペクトラル埋め込み、および T 分布確率近傍埋め込みなど、さまざまな多様体学習アルゴリズムを比較して、S カーブデータセットに対して非線形次元削減を行いました。