【Rによるデータサイエンス】自己組織化マップ(SOM)

【定義】
自己組織化マップとは。。。

ニューラルネットワークの1種で、目的変数を持たない教師なし学習アルゴリズムのこと。
高次元データを2次元平面上へ非線形射影するデータ解析手法。

ニューラルネットワークとは。。。
Wikipediaによると次のようにある。

ニューラルネットワーク(Neural network 神経回路網)とは、脳機能に見られるいくつかの特性を計算機上のシミュレーションによって表現することを目指した数学モデルである。

アルゴリズム
自己組織化マップの基本構造は、入力層と出力層の2層より構成されたニューラルネットワークである。
入力層には分析対象となる個体の変数ベクトルx_j
出力層にはユニットm_iがあるとする。
出力層の任意の1つのユニットは、入力層における変数ベクトルのすべてとリンクしている。

1.入力x_jと出力層の全てのユニットを比較し、最も類似しているユニットm_cを探し出し、そのユニットを勝者とする。
||x_j-m_c||=min_i\{||x_j-m_i||\}

2.探しだしたユニットの更新
m_i(t+1)=m_i(t)+h_{ci}(t)[x_j(t)-m_i(t)] (i \in N_c)
m_i(t+1)=m_i(t)] (i \not\in N_c)

ここで、h_{ci}(t)は近傍関数。

3.全ての入力ベクトルx_jに対して1と2のステップを反復実行する

ケーススタディ
kohonenパッケージのインストール

> install.packages("kohonen")
> library(kohonen)
 要求されたパッケージ class をロード中です 
 要求されたパッケージ MASS をロード中です

関数somegridを使用して出力層のユニットを設定する。
10列7行のhexagonal配置法を用いることにすると次のようになる。

> set.seed(10)
> gr<-somgrid(topo="hexagonal",xdim=10,ydim=7)
> iris.som<-som(as.matrix(iris[,1:4]),gr,rlen=200)

関数somを実行して、somgridで設定した10×7個のユニットの座標値および出力画面の設定に関する情報が格納される。
ユニットの座標値は$grid$ptsに格納される。
各ユニットに配置される個体の特徴となるコードはiris.som$codesに、
用いたデータのそれぞれの個体がどのユニットに配置されるかに関する情報はiris.som$classifに格納される。

可視化する。

> plot(iris.som,type="codes")


> lab.cod<-as.numeric(iris[,5])
> plot(iris.som, type="mapping", labels=lab.cod, col=lab.cod)


(参考資料)
よさげなサイトがあった。