"Isomap" (機械学習メソッド)
- DimensionReduction,DimensionReduce,FeatureSpacePlot,FeatureSpacePlot3Dのためのメソッドである.
- 等長写像を使って,データの次元を削減する.
詳細とサブオプション
- "Isomap"は,等長写像を表すもので,非線形の近傍に基づいた次元削減メソッドである.このメソッドは,測地距離を保存する変換を介してデータの低次元埋め込みを見付けようとする
- "Isomap"は非線形多様体について学ぶことができる.しかし,計算コストが高く,データに高密度の変動がある場合では失敗することがあり,境界についてはあまりよい結果は与えられない.
- 次のプロットは,"Isomap"が学んだ二次元埋込みを,Fisher's Irises,MNIST,FashionMNISTのベンチマークデータ集合に適用した結果を示している.
- "Isomap"は,まず,
最近傍が与えられると
個のデータ点上に近傍グラフを構築する.多様体上のすべての点のペア間の測地距離は最近傍グラフ
内の最短経路距離を推測することで求められる.これは,結果としてグラフ距離
の行列になる.このメソッドは,ユークリッド距離(最短距離)が測地距離になる埋込みを求めようとする.低次元埋込み
は埋込みコストを最低にすることで計算される.min ∑ Ni=1 [||yi-yj||- dij
]2 - このメソッドは,古典的な"MultidimensionalScaling"をグラフ距離
の行列に行うことに等しい.したがって,埋込み空間におけるユークリッド距離はグラフ距離と一致する.||yi-yj||≈ dijG - 次は,使用可能なサブオプションである.
-
"NeighborsNumber" Automatic 近傍 k の数
例題
すべて開く すべて閉じる例 (1)
SeedRandom[12]
data = Table[Insert[AngleVector[1 + {2, 8} * RandomReal[]], RandomReal[], 2], 1000];ListPointPlot3D[data, BoxRatios -> {1, 1, 1}, PlotStyle -> Directive[PointSize -> Large]]データ集合に"Isomap"を使って二次元空間にマッピングして,非線形次元削減を訓練する:
reducer = DimensionReduction[data, 2, Method -> "Isomap"]reducedpts = reducer[data];
ListPlot[Style[#, Hue[First[#] / 20]] & /@ reducedpts, AspectRatio -> 1 / 2, PlotStyle -> Directive[PointSize -> Small]]もとの空間内のデータ集合を,各点をその削減された変数に従って彩色して可視化する:
ListPointPlot3D[Style[#, Hue[First[reducer[#]] / 20]] & /@ data, PlotStyle -> Directive[PointSize -> Large], BoxRatios -> {1, 1, 1}]スコープ (1)
データ集合の可視化 (1)
ExampleDataからFisherのアヤメに関するデータ集合をロードする:
iris = ExampleData[{"MachineLearning", "FisherIris"}, "Data"];RandomSample[iris, 5]diris = DimensionReduction[iris[[All, 1]], 2, Method -> "Isomap"]byspecies = GroupBy[iris, Last -> First];byspecies = diris /@ byspecies;ListPlot[Values[byspecies], PlotLegends -> Keys[byspecies]]オプション (1)
"NeighborsNumber" (1)
3D幾何データから,ランダムな視点によるさまざまな頭部の向きのデータ集合を生成する:
SeedRandom[123]
cc = RandomPoint[Circle[{0, 0}, 0.8, {Pi, 2Pi}], 50];
pp = Flatten[Table[{cc[[i, 1]], cc[[i, 2]], j}, {i, 1, Length@cc}, {j, -0.8, 0.8, 0.2}], 1];
vp = RandomSample[pp, 60];
obj = ExampleData[{"Geometry3D", "Beethoven"}];
poses = Table[Show[obj, ViewPoint -> vp[[i]]], {i, 1, Length@vp}];
imgs = Table[Rasterize[poses[[i]], ImageResolution -> 64, ImageSize -> 50, Background -> None], {i, 1, Length@poses}];RandomSample[imgs, 10]等角写像を実行するために,近傍グラフで"NeighborsNumber"を指定することで,このデータ集合を二次元表現に削減する:
red = DimensionReduce[imgs, 2, Method -> {"Isomap", "NeighborsNumber" -> 10}];上下と前横の向きのもつれが解消された削減空間でもとの画像を可視化する:
Graphics[MapThread[Inset[#1, #2, {0, 0}, 15, Background -> None]&, {imgs, red}], ImageSize -> 300, ImagePadding -> 15, Frame -> False, AspectRatio -> 1]