tokyo r 11_self_organizing_map

20
Tokyo.R #11 (2011/01/29) 『Rによるデータサイエンス』第 II 部第 6 「自己組織化マップ」 SOM:Self-Organizing Map 発表者: Bob#3(TwitterID:@bob3bob3)

Upload: bob3-bob3

Post on 25-May-2015

4.789 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Tokyo r 11_self_organizing_map

Tokyo.R #11 (2011/01/29)『Rによるデータサイエンス』第 II 部第 6 章

「自己組織化マップ」SOM:Self-Organizing Map発表者: Bob#3(TwitterID:@bob3bob3)

Page 2: Tokyo r 11_self_organizing_map

初心者の方へ

● 今日のお話はあまり初心者向けではありません…

– @sakaue さんの Japan.R での講義資料が素晴らしいのでお勧めです。

● http://lab.sakaue.info/wiki.cgi/JapanR2010?page=JapanR2010AM

Page 3: Tokyo r 11_self_organizing_map

自己組織化マップとは?● Teuvo Kohonen が 1980 年代前半に提案した

手法。

● ニューラルネットワークモデルの一種で、人間が脳の中で情報を分類・整理する過程を模した方法。

● 多次元データをより低次元(多くの場合は2次元)のマップに落とし込み可視化する、というのが良く使われるケース。その意味で主成分分析や MDS に似ている。

● 格子状または蜂の巣状のグリッドを用意し、それぞれの部屋(ユニット)に似たものを集めてゆく。

● クラスタリングの一種としても使われる。

Page 4: Tokyo r 11_self_organizing_map

要は「脳内メーカー」

http://maker.usoko.net/nounai/

Page 5: Tokyo r 11_self_organizing_map

事例紹介

Page 6: Tokyo r 11_self_organizing_map

RでSOM

● 主なパッケージと関数

– {som} som()

– {class} SOM(), batchSOM()

– {kohonen} som()

– {wccsom} wccsom()

Page 7: Tokyo r 11_self_organizing_map

RでSOM

● 主なパッケージと関数

– {som} som()

– {class} SOM(), batchSOM()

– {kohonen} som()  ← 今回紹介するのはコレ!

– {wccsom} wccsom()

Page 8: Tokyo r 11_self_organizing_map

毎度おなじみ「あやめ」のデータ● いわゆる「フィッシャーのあやめのデータ」

● 3品種の菖蒲のがく片の長さと幅、花びらの長さと幅のデー

タ (n=150) 。

● 詳しくはウィキペディア(英語版)で!– http://en.wikipedia.org/wiki/Iris_flower_data_set

setosa versicolor virginica

Page 9: Tokyo r 11_self_organizing_map

{kohonen} som()library(kohonen) #パッケージの読み込みset.seed(10) # 乱数種の指定

# som()はマトリクスしか受け付けないので変換iris.mat <- as.matrix(iris[,1:4])

#グリッドの大きさを指定。ただし「x*y < サンプルサイズ」# topoはグリッドの形状の指定。格子状の場合は“rect”# 蜂の巣状の場合は“hexa”GRID <- somgrid(xdim=3, ydim=3, topo="hexa")

# 自己組織化マップの実行iris.som <- som(iris.mat, # 分析するデータ。マトリクス grid=GRID, # グリッドの指定 rlen=1000) # 反復回数

# 各個体がどのユニットに分類されたかは$unit.classifに入っているtable(iris.som$unit.classif)# 1 2 4 5 6 7 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # 18 7 5 6 19 6 4 3 4 8 3 8 4 11 2 6 8 2 9 7 5 5

Page 10: Tokyo r 11_self_organizing_map

Sepal.LengthSepal.Width

Petal.LengthPetal.Width

とりあえず、 plot() !plot(iris.som, bg="#FFFF99")

Page 11: Tokyo r 11_self_organizing_map

バリエーション

plot(iris.som, bg="#FFFF99", codeRendering="stars")

plot(iris.som, bg="#FFFF99", codeRendering="lines")

Page 12: Tokyo r 11_self_organizing_map

マップ!Mapping plot

se

sese

se

sese

se

se

sese

se

sesese

se se se

se

sesese

se

se

se

sese

sesese

sese

sesese

se

se

se se

se

sese

se

se

sese

se

se

se

se

se

ve

ve

veve

veve

ve

ve

ve

ve

ve

ve

veve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

veve ve

veve

veve

ve

ve

veveve

ve

ve

ve

vi

vi

vi

vivi

vi

vi

vivi vivi

vi

vi

vivi

vi

vi

vivi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vivi

vi

vi

vivivi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

Page 13: Tokyo r 11_self_organizing_map

ユニットごとの個体数

Page 14: Tokyo r 11_self_organizing_map

収束の様子

0 200 400 600 800 1000

0.020

0.025

0.030

Training progress

Iteration

Mean distance to closest unit

Page 15: Tokyo r 11_self_organizing_map

さらにユニットをクラスタリングMapping plot

se

se sese

se

se

se

se

sese

se

se

se

se

se

sesese sese se

se

se

se

se

se

sese

se

se

se

sese

se

se

se

sese

se

sese

sese

se

se

se

se

se

se

se

veveveve

veve

ve

ve

ve

ve

ve

ve

veve

ve

veve

ve

veve

ve

ve

ve

veveve

ve

veve

veve

veve

ve

ve

ve

veve

ve

veveve

ve

ve

veve

ve

ve

ve

ve

vi

vi

vi

vi

vivi

vi

vivi

vi

vi

vi

vi

vivi

vi vi vi vi

vi

vi

vi

vi

vi

vivi

vivi

vi

vi

vi

vivi

vivi

vi

vivi

vi

vivivi

vi

vivivi

vi

vi

vi

vi

Page 16: Tokyo r 11_self_organizing_map

書き方# 色と記号の設定COL <- c("#FF3300", "#339966", "#0041FF")BGC <- c("#FFFF99", "#76E4A6", "#B4EBFA")SP <- as.numeric(iris[,5])LBL <- c("se","ve","vi")

# マップplot(iris.som, type="mapping", labels=LBL[SP], col=COL[SP], bg=BGC[1])

# ユニットごとの個体数plot(iris.som, type="counts")

# 収束の様子plot(iris.som, type="changes")

# ユニットをクラスタリングして色づけBGC <- c("#FFFF99", "#76E4A6", "#B4EBFA")iris.som.dist <- dist(iris.som$codes)^2CLST <-cutree(hclust(iris.som.dist,"ward"),3)plot(iris.som, type="mapping", labels=LBL[SP], col=COL[SP], bgcol=BGC[CLST])

Page 17: Tokyo r 11_self_organizing_map

グリッドを細かくするとMapping plot

se sese

sesese

se

se

se

se

se

se

se

se

se

se

se

se

se

se

se

se

se

se se

se

se

se

se

sese

se

se

se

se

se

se

se

se

se

se sese

se

se

sese se

se

se

ve

ve

ve

ve

ve ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

veve

ve

ve ve

ve

veve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

ve

veve

ve

ve

ve

vivi

vi

vi

vi

vi

vi

vi

vivi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vivi

vi

vi

vi

vi

vi

vi

vi

vi

vi

vivi

vi

vi

vi vivi

vi

vi

vi

vi

vivi vi

vi vi

vi

vi

vi

Page 18: Tokyo r 11_self_organizing_map

主成分分析やMDSでは

Page 19: Tokyo r 11_self_organizing_map

書き方

# グリッドを細かくするとGRID <- somgrid(xdim=12, ydim=12, topo="hexa") iris.som <- som(iris.mat, grid=GRID, rlen=1000)iris.som.dist <- dist(iris.som$codes)^2CLST <-cutree(hclust(iris.som.dist,"ward"),3)plot(iris.som, type="mapping", labels=LBL[SP], col=COL[SP], bgcol=BGC[CLST])

# 主成分分析の場合iris.pca <- princomp(iris[,-5])plot(iris.pca$scores[,1:2], pch=21, bg=COL[SP], main="主成分分析")

# 非計量MDS(マンハッタン距離)の場合library(MASS)iris.mds <- isoMDS(dist(iris[-143,-5], "man"))plot(iris.mds$points, pch=21, bg=COL[SP], main="非計量MDS")

Page 20: Tokyo r 11_self_organizing_map

ご清聴、ありがとうございました。