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

TokyoR#11 自己組織化マップ

bob3bob3
January 12, 2022

TokyoR#11 自己組織化マップ

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

bob3bob3

January 12, 2022
Tweet

More Decks by bob3bob3

Other Decks in Programming

Transcript

  1. 自己組織化マップとは? • Teuvo Kohonen が 1980 年代前半に提案した 手法。 • ニューラルネットワークモデルの一種で、人間

    が脳の中で情報を分類・整理する過程を模した 方法。 • 多次元データをより低次元(多くの場合は2次 元)のマップに落とし込み可視化する、というの が良く使われるケース。その意味で主成分分 析や MDS に似ている。 • 格子状または蜂の巣状のグリッドを用意し、そ れぞれの部屋(ユニット)に似たものを集めてゆ く。 • クラスタリングの一種としても使われる。
  2. RでSOM • 主なパッケージと関数 – {som} som() – {class} SOM(), batchSOM()

    – {kohonen} som()  ← 今回紹介するのはコレ! – {wccsom} wccsom()
  3. {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
  4. マップ! 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
  5. 収束の様子 0 200 400 600 800 1000 0.020 0.025 0.030

    Training progress Iteration Mean distance to closest unit
  6. さらにユニットをクラスタリング 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
  7. 書き方 # 色と記号の設定 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])
  8. グリッドを細かくすると 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
  9. 書き方 # グリッドを細かくすると 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")