とある技術者の徒然草

生産技術者の適当な日記(統計言語Rに関するメモがメイン)

【R言語】クラスターの数を機械的に決める factoextraパッケージ

クラスターの数を機械的に決める

クラスター分析でkmeans法を使用するときはクラスタ数を自分で決定する必要がある。
その際に参考となるGap統計量を求める。

#install.packages("factoextra")

#適切なクラスター数の検討
library(factoextra)
#wssの推移をみる
fviz_nbclust(kmdf,kmeans,method="wss")
#クラスター数は5がよさそう

fviz_nbclust(kmdf, kmeans, method = "silhouette")
#クラスター数は2がよさそう

#gap統計量を計算
gap_stat <- clusGap(kmdf, FUN = kmeans, nstart = 25,
                    K.max = 10, B = 10)
print(gap_stat, method = "firstmax")


plot(gap_stat)
factoextra::fviz_gap_stat(gap_stat)
#6くらいでGap統計量の増加がながら化になるなだらかになる

km <- kmeans(kmdf,5)
km$cluster

#空のデータフレーム用意
name <- NA
classnum <- NA

filenamelist <- data.frame(name,classnum)

#名前とクラスのリスト(データフレーム)を作成する
i <- 1
for (i in 1:length(imagelistname)){
  filenamelist[i,1] <- substring(imagelistname[i],60,79)
}

#ファイル名とクラスタが対応した表が完成
filenamelist$classnum <- km$cluster

・plotでグラフ化
f:id:M_taka072:20190112171254p:plain

・factoextra::fviz_gap_staでグラフ化 f:id:M_taka072:20190112171259p:plain

・結果
パッケージを使用するとクラスター数を決める際の参考になるデータを得られた。
ただし、理論は完全にしていない。

・参考
http://www.sthda.com/english/wiki/factoextra-r-package-easy-multivariate-data-analyses-and-elegant-visualization