例 2 - hclust 和異常值
通過分層聚類,異常值通常顯示為一點聚類。
生成三個高斯分佈以說明異常值的影響。
set.seed(656)
x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
XYdf = data.frame(x,y)
plot(XYdf, pch=20)
構建叢集結構,將其拆分為三個叢集。
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust 發現了兩個異常值並將其他所有內容放入一個大叢集中。要獲得真實群集,你可能需要將 k 設定得更高。
XYs6 = cutree(XY_sing,k=6)
table(XYs6)
XYs6
1 2 3 4 5 6
148 150 1 149 1 1
plot(XYdf, pch=20, col=XYs6)
此 StackOverflow 帖子有關如何選擇群集數量的一些指導,但請注意層次群集中的此行為。