Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TokyoR#11 自己組織化マップ

Ea0b0e1760fae9c7599f86c3555e071d?s=47 bob3bob3
January 12, 2022

TokyoR#11 自己組織化マップ

R言語による自己組織化マップ(SOM、self-organizing map)。
2011年1月。

Ea0b0e1760fae9c7599f86c3555e071d?s=128

bob3bob3

January 12, 2022
Tweet

More Decks by bob3bob3

Other Decks in Programming

Transcript

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

    Map 発表者: Bob#3(TwitterID:@bob3bob3)
  2. 初心者の方へ • 今日のお話はあまり初心者向けではありません… – @sakaue さんの Japan.R での講義資料が素晴らし いのでお勧めです。 •

    http://lab.sakaue.info/wiki.cgi/JapanR2010?page=JapanR2010AM
  3. 自己組織化マップとは? • Teuvo Kohonen が 1980 年代前半に提案した 手法。 • ニューラルネットワークモデルの一種で、人間

    が脳の中で情報を分類・整理する過程を模した 方法。 • 多次元データをより低次元(多くの場合は2次 元)のマップに落とし込み可視化する、というの が良く使われるケース。その意味で主成分分 析や MDS に似ている。 • 格子状または蜂の巣状のグリッドを用意し、そ れぞれの部屋(ユニット)に似たものを集めてゆ く。 • クラスタリングの一種としても使われる。
  4. 要は 「脳内メーカー」 http://maker.usoko.net/nounai/

  5. 事例紹介

  6. RでSOM • 主なパッケージと関数 – {som} som() – {class} SOM(), batchSOM()

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

    – {kohonen} som()  ← 今回紹介するのはコレ! – {wccsom} wccsom()
  8. 毎度おなじみ「あやめ」のデータ • いわゆる「フィッシャーのあやめのデータ」 • 3品種の菖蒲のがく片の長さと幅、花びらの長さと幅のデー タ (n=150) 。 • 詳しくはウィキペディア(英語版)で!

    – http://en.wikipedia.org/wiki/Iris_flower_data_set setosa versicolor virginica
  9. {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
  10. Sepal.Length Sepal.Width Petal.Length Petal.Width とりあえず、 plot() ! plot(iris.som, bg="#FFFF99")

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

  12. マップ! 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
  13. ユニットごとの個体数

  14. 収束の様子 0 200 400 600 800 1000 0.020 0.025 0.030

    Training progress Iteration Mean distance to closest unit
  15. さらにユニットをクラスタリング 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
  16. 書き方 # 色と記号の設定 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])
  17. グリッドを細かくすると 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
  18. 主成分分析やMDSでは

  19. 書き方 # グリッドを細かくすると 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")
  20. ご清聴、ありがとうございました。