自己組織化マップ

「データからの知識発見」第13章 自己組織化マップ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
library(som)
library(knitr)
小<-c(1,1,1,1,1,0,0,0,0,1,0,0,0,0)
中<-c(0,0,0,0,0,1,1,1,1,0,0,0,0,0)
大<-c(0,0,0,0,0,0,0,0,0,0,1,1,1,1)
2本足<-c(1,1,1,1,1,1,0,0,0,0,0,0,0,0)
4本足<-c(0,0,0,0,0,0,1,1,1,1,1,1,1,1)
毛<-c(0,0,0,0,0,0,1,1,1,1,1,1,1,1)
蹄<-c(0,0,0,0,0,0,0,0,0,0,0,0,1,1)
たてがみ<-c(0,0,0,0,0,0,0,0,1,0,0,1,1,0)
羽<-c(1,1,1,1,1,1,0,0,0,0,0,0,0,0)
狩猟<-c(0,0,0,0,1,1,1,0,1,1,1,1,0,0)
走る<-c(0,0,0,0,0,0,0,1,1,0,1,1,1,0)
飛ぶ<-c(1,0,1,1,1,0,0,0,0,0,0,0,0,0)
泳ぐ<-c(0,0,1,1,0,0,0,0,0,0,0,0,0,0)
anim1<-data.frame(小,中,大,2本足,4本足,毛,蹄,たてがみ,羽,狩猟,走る,飛ぶ,泳ぐ)
row.names(anim1)<-c("ハト","メンドリ","アヒル","ガチョウ","タカ","ワシ","キツネ","イヌ","オオカミ","ネコ","トラ","ライオン","ウマ","ウシ")
kable(anim1)
2本足 4本足 たてがみ 狩猟 走る 飛ぶ 泳ぐ
ハト 1 0 0 1 0 0 0 0 1 0 0 1 0
メンドリ 1 0 0 1 0 0 0 0 1 0 0 0 0
アヒル 1 0 0 1 0 0 0 0 1 0 0 1 1
ガチョウ 1 0 0 1 0 0 0 0 1 0 0 1 1
タカ 1 0 0 1 0 0 0 0 1 1 0 1 0
ワシ 0 1 0 1 0 0 0 0 1 1 0 0 0
キツネ 0 1 0 0 1 1 0 0 0 1 0 0 0
イヌ 0 1 0 0 1 1 0 0 0 0 1 0 0
オオカミ 0 1 0 0 1 1 0 1 0 1 1 0 0
ネコ 1 0 0 0 1 1 0 0 0 1 0 0 0
トラ 0 0 1 0 1 1 0 0 0 1 1 0 0
ライオン 0 0 1 0 1 1 0 1 0 1 1 0 0
ウマ 0 0 1 0 1 1 1 1 0 0 1 0 0
ウシ 0 0 1 0 1 1 1 0 0 0 0 0 0

データを標準化する

1
2
3
anim2<-normalize(anim1)
anim3<-som(anim2,xdim=10,ydim=10,rlen=500) #xdim,ydim 出力のニューロンの個数、rlen繰り返しの回数
kable(anim3$visual,digits=4)
x y qerror
0 3 0.9803
0 4 1.4832
0 0 0.8598
0 0 0.8598
0 7 1.2782
2 9 1.8526
7 9 1.3487
9 8 1.9261
9 9 1.3354
6 6 2.0908
9 3 1.4329
9 3 1.4751
9 0 1.4081
7 0 1.8199
1
2
3
anim4<-anim3$visual[,1:2]
plot(anim4,type="n",xlim=c(-1,10),ylim=c(-1,10),main="動物データの分類")
text(anim4,rownames(anim1))