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

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

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

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

[scikit-learnのマップ]

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

です。

Isomapの実装

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

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

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

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

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

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

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

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

コードを解説します。

# 解説5:Isomapを実施——————————-
isomap = manifold.Isomap(n_neighbors=10, n_components=2)
X_isomap = isomap.fit_transform(X)

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

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

Isomapの心

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

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

scikit-learnのIsomapの解説ページ

Isomapは多様体上の距離を測定し、多次元尺度構成法で表現した次元圧縮手法です。

何やら難しい名前のオンパレードですが、簡単に説明します。

3次元空間にデータが分布していたとしても、実はとある平面上に分布していたとすると,

データの次元は2次元で表すことができます。

このように実はN次元のデータですが、Nより小さな次元の平面や曲がった平面(多様体)の上にデータがのっている場合にIsomapが適用できます。

こちらの図がとても分かりやすいです。

[引用:Rでisomap(多様体学習のはなし)]

各データの多様体上での距離を求めるのは、一見難しそうですが、単純に近いデータとのつながりを使用します。

こうして各データがその他のデータとどうつながっているのかというグラフ行列に似た「測地線距離行列」が生成されます。

あとは「多次元尺度構成法」で測地線距離行列を低次元で表します。

多次元尺度構成法は測地線距離行列が似ているものは近くに、似ていないものは遠くに配置する方法です。

以上の方法によりIsomapで次元圧縮を行うことができます。

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

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

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