EPG's BLOG

某金融会社の社内SE。気になったことをちょいちょい書いていきます

データサイエンス講義 3章「アルゴリズム」 その5

今回は、k平均法のコーディングについて。

データサイエンス講義

データサイエンス講義

 

 

■演習
【対象】
2次元正規分布に従う3つのデータセットを用意し、k平均法により、正しく分類されるか確認。
※k=3とする。

 

【コーディング】

# # # # # # # # # # # # # # # # # # # #

#k平均法によるクラスタリング
library("MASS")

#ラベル1(RED)のデータ作成
mu1 <- c(1.5,0)
Sigma1 <- matrix(c(0.5,0,0,0.5),2,2)
datanum1 <- 200
dat1 <- mvrnorm(datanum1,mu1,Sigma1)

#ラベル2(BLUE)のデータ作成
mu2 <- c(0,1.5)
Sigma2 <- matrix(c(0.5,0,0,0.5),2,2)
datanum2 <- datanum1
dat2 <- mvrnorm(datanum2,mu2,Sigma2)

#ラベル3(GREEN)のデータ作成
mu3 <- c(1.5,1.5)
Sigma3 <- matrix(c(0.5,0,0,0.5),2,2)
datanum3 <- datanum1
dat3 <- mvrnorm(datanum3,mu3,Sigma3)

#データ結合
datatest <- rbind(dat1,dat2,dat3)
#正解ラベルを付加
label <- factor(c(rep("RED",200),rep("BLUE",200),rep("GREEN",200)))
datatest <- cbind(datatest,label)

#3つのラベルがあると知った上で、k平均法を実行
(datakluster <- kmeans(x=datatest,centers=3))
#正解ラベルとクラスタリング結果の比較
table(datakluster$cluster,label)

plot(x=datatest, col=datakluster$cluster,pch=datakluster$cluster)

# # # # # # # # # # # # # # # # # # # #

 

k平均法でクラスタリングした結果は以下。
横が正しいラベル、縦がクラスタリング結果。

label
BLUE GREEN RED
1 1 9 186
2 15 176 13
3 184 15 1

 

この結果から、(184+176+188)/600 * 100 = 91.3%の精度があることを確認。
また、各データをプロットすると、以下のようになる。

f:id:EPG:20141111180006p:plain

■参考になるページ(コーディング)
k平均法のRでの方法が記載。

【#R言語】k-means(K平均法)を使った非階層型クラスタリングの実行 #統計学 #機械学習 - Qiita