Skip to content

Latest commit

 

History

History
118 lines (76 loc) · 4.24 KB

150706.md

File metadata and controls

118 lines (76 loc) · 4.24 KB
----[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