Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

初心者の方へ ● 今日のお話はあまり初心者向けではありません… – @sakaue さんの Japan.R での講義資料が素晴らし いのでお勧めです。 ● http://lab.sakaue.info/wiki.cgi/JapanR2010?page=JapanR2010AM

Slide 3

Slide 3 text

自己組織化マップとは? ● Teuvo Kohonen が 1980 年代前半に提案した 手法。 ● ニューラルネットワークモデルの一種で、人間 が脳の中で情報を分類・整理する過程を模した 方法。 ● 多次元データをより低次元(多くの場合は2次 元)のマップに落とし込み可視化する、というの が良く使われるケース。その意味で主成分分 析や MDS に似ている。 ● 格子状または蜂の巣状のグリッドを用意し、そ れぞれの部屋(ユニット)に似たものを集めてゆ く。 ● クラスタリングの一種としても使われる。

Slide 4

Slide 4 text

要は 「脳内メーカー」 http://maker.usoko.net/nounai/

Slide 5

Slide 5 text

事例紹介

Slide 6

Slide 6 text

RでSOM ● 主なパッケージと関数 – {som} som() – {class} SOM(), batchSOM() – {kohonen} som() – {wccsom} wccsom()

Slide 7

Slide 7 text

RでSOM ● 主なパッケージと関数 – {som} som() – {class} SOM(), batchSOM() – {kohonen} som()  ← 今回紹介するのはコレ! – {wccsom} wccsom()

Slide 8

Slide 8 text

毎度おなじみ「あやめ」のデータ ● いわゆる「フィッシャーのあやめのデータ」 ● 3品種の菖蒲のがく片の長さと幅、花びらの長さと幅のデー タ (n=150) 。 ● 詳しくはウィキペディア(英語版)で! – http://en.wikipedia.org/wiki/Iris_flower_data_set setosa versicolor virginica

Slide 9

Slide 9 text

{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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

バリエーション plot(iris.som, bg="#FFFF99", codeRendering="stars") plot(iris.som, bg="#FFFF99", codeRendering="lines")

Slide 12

Slide 12 text

マップ! Mapping plot 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 se se se se se se se se se se se se se se se se 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 ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi

Slide 13

Slide 13 text

ユニットごとの個体数

Slide 14

Slide 14 text

収束の様子 0 200 400 600 800 1000 0.020 0.025 0.030 Training progress Iteration Mean distance to closest unit

Slide 15

Slide 15 text

さらにユニットをクラスタリング Mapping plot se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se 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 ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi

Slide 16

Slide 16 text

書き方 # 色と記号の設定 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)^2 CLST <-cutree(hclust(iris.som.dist,"ward"),3) plot(iris.som, type="mapping", labels=LBL[SP], col=COL[SP], bgcol=BGC[CLST])

Slide 17

Slide 17 text

グリッドを細かくすると Mapping plot se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se se 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 ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve ve vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi vi

Slide 18

Slide 18 text

主成分分析やMDSでは

Slide 19

Slide 19 text

書き方 # グリッドを細かくすると GRID <- somgrid(xdim=12, ydim=12, topo="hexa") iris.som <- som(iris.mat, grid=GRID, rlen=1000) iris.som.dist <- dist(iris.som$codes)^2 CLST <-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")

Slide 20

Slide 20 text

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