SpectralEmbedding (次元圧縮)【Pythonとscikit-learnで機械学習:第23回】

SpectralEmbeddingによるデータの非線形次元圧縮を実装します。

PCAが機能しない非線形な構造を持つデータにおいて、データ数が膨大でない場合にSpectralEmbeddingが使用されます。

SpectralEmbeddingは、scikit-learnのアルゴリズムチートマップの以下の黒矢印に対応します。

[scikit-learnのマップ]

次元圧縮→PCA機能せず→サンプル数1万以下→[SpectralEmbedding]

です。

SpectralEmbeddingの実装

本記事ではムーンのサンプルデータを使用して、次元圧縮を行います。

実装コードは以下の通りです。

結果は次の通りになります。

結果のグラフ(上)が、元データです。

線形には判別できない非線形なデータ構造をしています。

前回のカーネルPCAを実施した結果が、(真ん中)のグラフです。

グラフ(下)が今回のSpectralEmbeddingの結果となります。

Kernel PCAとは異なりますが、データ構造がより分かりやすいように、新たな軸が作られていることが分かります。

コードを解説します。

# 解説5:Spectral Embeddingを実施——————————-
spca = manifold.SpectralEmbedding(n_components=2,  affinity=’nearest_neighbors’)
X_spca = spca.fit_transform(X)

取り出す次元の数を2に指定し、グラフ行列を作成するための方法をnearest_neighborsに指定しています。

それでは「結局、SpectralEmbeddingって何をやっていたの?」を説明します。

SpectralEmbeddingの心

正確な情報は以下をご覧ください。

scikit-learnの多様体埋め込みの解説ページ

scikit-learnのSpectralEmbeddingの解説ページ

Spectral Clusteringの場合と同じく、M個のデータをまずM×Mのグラフ行列へと変換します。

そしてこのM×Mの行列を固有値分解することで、次元を圧縮します。

スペクトラルクラスタリング(SpectralClustering)(クラスタ分析)【Pythonとscikit-learnで機械学習:第10回】
スペクトラルクラスタリングによって、データをクラスタリング解析する手法を、実装・解説します。...

Spectral Embeddingは結局、各データ点がその他全部のデータ点とどうつながっているのかという情報を用いて、データの次元を圧縮していることになります。

以上、Pythonとscikit-learnで学ぶ機械学習入門|第23回:Spectral Embeddingでの次元圧縮でした。

次回はIsomapによる次元圧縮について説明します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...