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

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

非線形な構造を持つデータにおいて、Isomapがうまくいかない場合に、LLEが使用されます。

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

[scikit-learnのマップ]

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

です。

LLEの実装

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

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

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

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

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

前回のIsompaを実施した結果が、(真ん中)のグラフです。

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

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

コードを解説します。

# 解説5:LLEを実施——————————-
lle = manifold.LocallyLinearEmbedding(n_neighbors=10, n_components=2)
X_lle = lle.fit_transform(X)

取り出す次元の数を2に指定し、多様体を求めるためにいくつの近傍の点を考慮するのかを、n_neighbors=10に指定しています。

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

LLEの心

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

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

scikit-learnのLLEの解説ページ

LLEは多様体上での距離を求める点はIsomapと同じです。

LLEはその後、多様体上で近くのデータ同士は線形な関係で表されるという拘束のもとで次元を圧縮するようです。

とても難しいので、私もこれ以上はよくわかっていません。

申し訳ございません。

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

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