例 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)

StackOverflow 文件

構建叢集結構,將其拆分為三個叢集。

    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 文件

StackOverflow 帖子有關如何選擇群集數量的一些指導,但請注意層次群集中的此行為。