----[p.275]-----------------------------
階層的クラスタリング
(樹形図作成)
プログラム(HCluster_yeast_ave.R)を添付しています
> mydata <- read.csv("yeast.csv",header=F)
> yeast50 <- mydata[1:50,2:9] データ行数を1~50のみ抽出
> hclustfunc <- function(x) hclust(x, method="ave") 連結法指定
> distfunc <- function(x) dist(x,method = "euclidean", diag = FALSE, upper = FALSE) 距離計算
> d <- distfunc(yeast50)
> hc <- hclustfunc(d)
> groups <- cutree(hc, k=4) 4クラスタに設定
png("fig_hc_yeast50.png", width=480, height=240, units="px",pointsize=12) PNG画像に保存
> plot(hc, hang <- -1, labels = groups)
> rect.hclust(hc, k=4, which = NULL, x=NULL, h=NULL, border=2, cluster=NULL) 赤色四角枠でクラスタ囲む
> dev.off()
<参考図 method=average>
----------------(p.277 Visualizing clusters)-------------------------------------------
k-means clustering結果の視覚化(ここでは下記4種類)を紹介
1) plot (p.274参照) : 各点視覚化
2) fpc package : 密度関数によるクラスタリング領域の塗りつぶし
3) ordispider : クラスタリング中心から所属点へ線引
4) silhouette距離 : クラスタリングの質を視覚化
---------------------------------------------------------------------------------------------
k-means結果データの準備
> mydata <- read.csv("yeast.csv",header=F)
> dat1 <- mydata[,2:9]
> kmeans_res <- kmeans(dat1,4)
-----------------------------------------------------------------------------------------------
> plot(dat1, col = kmeans_res$cluster)
> install.packages("fpc") fpcパッケージのインストール(1分程)
> library(fpc)
> library(cluster) : clusplotに必要
> clusplot(dat1, kmeans_res$cluster, color=T, shade=T, labels=2, lines=0)
------------------------------------------------------------------------------------
> install.packages("vegan") veganパッケージのインストール
> library(vegan)
要求されたパッケージ permute をロード中です
要求されたパッケージ lattice をロード中です
This is vegan 2.3-0
> groups <- levels(factor(kmeans_res$cluster))
> ordiplot(cmdscale(dist(dat1)), type = "n")
Warning message:
In ordiplot(cmdscale(dist(dat1)), type = "n") :
Species scores not available
> cols <- rainbow(nlevels(factor(kmeans_res$cluster)))
> for(i in seq_along(groups)) { points(cmdscale(dist(dat1))[factor(kmeans_res$cluster) == groups[i], ], col = cols[i], pch = 16) }
> ordispider(cmdscale(dist(dat1)), factor(kmeans_res$cluster), label = TRUE)
----------------------------------------------------------------------------------
クラスタリングの評価指標
Silhouette値は、他のクラスターに含まれる点と、その点が自クラスター内の各点にどれくらい接近しているかの尺度。0.6以上(クラスタリング良好)を指標に使う。
-1~1 の範囲値をとる。
Silhouette(i) = (min(b(i,:),2)-a(i))/max(a(i),min(b(i,:)))
a(i) =i 番目の点から自身のクラスターの他の点までの平均距離
b(i,k) =i 番目の点から他のクラスターkの点までの平均距離
---------------------------------------------------------------------------------------
> tmp <- (daisy(dat1))^2 ペアワイズ距離行列計算
Warning message:
In daisy(dat1) : binary variable(s) 5 treated as interval scaled
> sil <- silhouette(kmeans_res$cluster, tmp) シルエット距離の計算
> plot(sil) 視覚化(注:グラフ表示されず)
> summary(sil)
Silhouette of 1484 units in 4 clusters from silhouette.default(x = kmeans_res$cluster, dist = tmp) :
Cluster sizes and average silhouette widths:
242 489 579 174
0.3487553 0.1465687 0.3780225 0.3929543
Individual silhouette widths:
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.1978 0.1534 0.3201 0.2987 0.4626 0.6814
--------------------------------------------------------------------------------------
参考ページ
<視覚化各種>
http://stackoverflow.com/questions/15376075/cluster-analysis-in-r-determine-the-optimal-number-of-clusters
<Silhouette値>
http://jp.mathworks.com/help/stats/k-means-clustering.html