Rでisomap(多様体学習のはなし)

29
Tokyo.R #14 1 Risomap (多様体学習のはなし) 2011528Tokyo.R #14 Kohta Ishikawa (@_kohta)

description

 

Transcript of Rでisomap(多様体学習のはなし)

Page 1: Rでisomap(多様体学習のはなし)

Tokyo.R #14

1

Rでisomap (多様体学習のはなし)

2011年5月28日 Tokyo.R #14

Kohta Ishikawa (@_kohta)

Page 2: Rでisomap(多様体学習のはなし)

Tokyo.R #14

2

アウトライン

l 多様体学習って? l 線形と非線形 l  isomap l 実装してみた l 実務的な難しさ

Page 3: Rでisomap(多様体学習のはなし)

Tokyo.R #14

3

多様体学習(manifold learning)?

l 非線形な多様体(manifold)上に分布するようなデータの構造を学習する一連の手法 l 例えば、高次元空間に埋め込まれた実質的に低次

元な多様体を学習することで、非線形データの低次元表現が可能になる

l データの分布構造が線形なら… l 主成分分析 (線形変換によって低次元でデータをよ

く説明しようと試みる) l 因子分析 l etc…

Page 4: Rでisomap(多様体学習のはなし)

Tokyo.R #14

4

多様体?

l 定義

位相空間Mが次の条件(1),(2)をみたすとき、Mをm次元位相多様体 (topological manifold)という。 (1) Mはハウスドルフ空間である (2) Mの任意の点pについて、pを含むm次元座標近傍(U,φ)が 存在する。

座標近傍: 位相空間Xの開集合Uから、m次元数空間Rmのある開集合U’への 同相写像 Φ: U → U’ があるとき、Uとφの対(U,φ)をm次元座標近傍といい、φをU上の 局所座標系という。

松本幸夫「多様体の基礎」 (東京大学出版会)より

Page 5: Rでisomap(多様体学習のはなし)

Tokyo.R #14

5

むり

Page 6: Rでisomap(多様体学習のはなし)

Tokyo.R #14

6

なんということはない

l 一見高次元に見えるデータが、実はもっと低次元の構造しか持っていない場合がある l そういうデータを適切に学習したい(多様体学習)

曲面の構造 ∈ 多様体

スイスロール → 3次元とみせかけて2次元            (ただし曲面上に分布している)

Sam T. Roweis and Lawrence K. Saul “Nonlinear Dimensionality Reduction by Locally Linear Embedding” SCIENCE (2000)

Page 7: Rでisomap(多様体学習のはなし)

Tokyo.R #14

7

線形な次元削減

l 主成分分析 l 次元削減と言えばこれ l 非線形データに対してはうまくいかない

主成分分析

どうやって(線形な)座標変換をしても 低次元で上手くデータを説明できない

東京大学大学院 情報理工学研究科 数理情報学専攻 中川研 公開資料より図表抜粋 http://bit.ly/hhSlyB

Page 8: Rでisomap(多様体学習のはなし)

Tokyo.R #14

8

非線形な次元削減

l  Isomap l  Laplacian Eigenmap l Kernel PCA etc…

うまい座標変換を施して、低次元でデータを説明したい

Page 9: Rでisomap(多様体学習のはなし)

Tokyo.R #14

9

isomap l 非線形次元削減手法のひとつ l K近傍グラフを用いて多様体上の測地線距離を(近

似的に)求め、多次元尺度構成法を用いて近似的にユークリッドな低次元空間に射影する

Page 10: Rでisomap(多様体学習のはなし)

Tokyo.R #14

10

測地線?

l 定義

リーマン多様体上の微分可能な曲線x(τ)が を満たすとき、x(τ)を測地線という。 ここで    はアフィン接続である。

Wikipediaより

Page 11: Rでisomap(多様体学習のはなし)

Tokyo.R #14

11

しつこい

Page 12: Rでisomap(多様体学習のはなし)

Tokyo.R #14

12

難しいのは単語だけ

2点間のユークリッド距離は データの構造(本当の「遠さ」) を反映していない

2点間の本当の「遠さ」を表しているのは データが分布する面(多様体!)に沿った 距離

グラフの2次元表現

測地線距離

測地線距離が欲しいので、各点について近場の点だけは ユークリッド距離でつなぐことにする。 そうしてできたグラフ(ネットワーク)を辿って最短距離を見出せば 測地線距離に近いものが計算できると期待する。

各点の近場のk点を直線距離でつないだグラフ

K近傍グラフ

Page 13: Rでisomap(多様体学習のはなし)

Tokyo.R #14

13

ようするに

いやがる多様体を わざわざユークリッド空間に埋め込む

Page 14: Rでisomap(多様体学習のはなし)

Tokyo.R #14

14

他に何が必要?

K近傍グラフの作成

点データ

測地線距離行列の作成

点データの低次元マップ表現

多次元尺度構成法 点間の距離データから 適切な座標値を計算!

Page 15: Rでisomap(多様体学習のはなし)

Tokyo.R #14

15

多次元尺度構成法

l 点間の距離データのみが与えられた場合に、点を上手く座標空間に表示する(座標値を求める)方法

l  Tokyo.R #09 l  http://www.slideshare.net/yokkuns/tokyor09

l  私のブログ l  http://d.hatena.ne.jp/koh_ta/20110514

Page 16: Rでisomap(多様体学習のはなし)

Tokyo.R #14

16

多次元尺度構成法

距離行列(の成分2乗)

Dij=dij2

ダブル・センタリング変換

K = -1/2 HDH

Hij = δij – (1/n)1ij

・Kの固有値が正(正定値)でなければならない ・距離がユークリッドでないときは一般に負の固有値が現れる ・isomapでは負の固有値は無視して固有値の大きい順に いくつか(2,3次元)を採用する  ⇒ 低次元表現! ・測地線距離のユークリッド性が弱いときは近似が悪くなる

Page 17: Rでisomap(多様体学習のはなし)

Tokyo.R #14

17

Rにisomapがない

l たぶんない l  Pure Rで実装すると重くてむり l データ1000個 → 20分くらい…

Page 18: Rでisomap(多様体学習のはなし)

Tokyo.R #14

18

あらためて探したらあった

l  veganパッケージ l 植生関連の人向けのパッケージ

dist(d) : dist形式(ユークリッド距離)データ ndim : 出力する次元 k : k近傍グラフの近傍数

Page 19: Rでisomap(多様体学習のはなし)

Tokyo.R #14

19

C++で書くかRcppとかあるし とか言って大体書いたあとに見つけた

l Rcpp l RとC++の連携を便利にしたRパッケージ l 先人達のとてもすばらしい資料群

l @sfchaos l  http://www.slideshare.net/sfchaos/tokyor7rcc

l @mickey24 l  http://www.slideshare.net/mickey24/extend-r-with-

rcpp

l  Pure Rに比べてだいたい10~100倍くらいは速い

Page 20: Rでisomap(多様体学習のはなし)

Tokyo.R #14

20

書いた

l CPPLapackというすばらしいLapackのクラスラッパーがある

l  LapackはFortran臭がきつい l CPPLapackは行列クラスも定義しているので、和

や積などの行列演算も簡単 l ただしLapackのフル機能が使えるとは限らない…

l 実際Rのcmdscale関数(Fortran実装)が使っている_dsysvxルーチンは使えないっぽい

Page 21: Rでisomap(多様体学習のはなし)

Tokyo.R #14

21

書いた

SEXPはRのデータ形式

Rcppの返り値形式

最後にC++オブジェクトをラップしてRに返す

Page 22: Rでisomap(多様体学習のはなし)

Tokyo.R #14

22

実行結果

l まだ微妙にバグがあります… l でもほぼあってます

元データ 2次元マップ

Page 23: Rでisomap(多様体学習のはなし)

Tokyo.R #14

23

で、実際使えるの?

l 実務的に使える手法の条件(例) l 手法が理解しやすいこと l 結果の解釈が容易であること l 直感と外れない結果が出ること l etc

Page 24: Rでisomap(多様体学習のはなし)

Tokyo.R #14

24

非線形の(実務的)むずかしさ

l 手法が複雑になりがち l 結果の解釈が難しくなりがち

l なんでそういう結果が出たのか? l 次元削減に使った非線形変換の性質を元の座標系

(=実務的に意味がある量)で説明できるのか? l 主成分分析等は簡単(性質=主成分寄与率、因子付加量

など) l 結果を直感で解釈できるかどうかは問題による l 構造に興味を持たない範囲(単純な分類など)では

使えるんじゃないか

Page 25: Rでisomap(多様体学習のはなし)

Tokyo.R #14

25

Isomapの実用的むずかしさ

l K近傍グラフのKをいくつにするべきか? l Kが小さすぎると全体が正しく連結されない l Kが大きすぎると多様体の構造が正しく反映されない

l 多分色々研究があると思いますがぶっちゃけあまり調べてないです…

l マッピングルールの解釈が不可能 l 元の点⇒測地線距離⇒多次元尺度法

Page 26: Rでisomap(多様体学習のはなし)

Tokyo.R #14

26

kの値による変化

l 少なすぎても多すぎてもだめ l  具体的なkの値はバグもあるので「だいたい」と思ってください

k=4(少なすぎ) k=8(丁度良い) 多分バグがとれるとk=5,6 あたりで丁度良くなります

k=20(多すぎ)

Page 27: Rでisomap(多様体学習のはなし)

Tokyo.R #14

27

kの値による変化

l  kが少ないとグラフが分断してしまう l  kが多いと多様体の構造を無視して繋がってしまう

k=4 k=8 k=20

snaパッケージのgplot関数を利用

Page 28: Rでisomap(多様体学習のはなし)

Tokyo.R #14

28

今後

l  Isomapはあったから他の多様体学習を実装して差別化したい… (with @sfchaos)

l パッケージ周りの細かいことを色々調べないと… l winとlinuxの動的ライブラリの違いとか

Page 29: Rでisomap(多様体学習のはなし)

Tokyo.R #14

29

ありがとうございました