簡體   English   中英

層次聚類和 k 均值

[英]Hierarchical clustering and k means

我想運行層次聚類分析。 我知道 hclust() function 但不知道如何在實踐中使用它; 我堅持向 function 提供數據並處理 output。

我想對給定的測量進行聚類的主要問題。

我還想將層次聚類與 kmeans() 生成的層次聚類進行比較。 同樣,我不確定如何調用此 function 或使用/操作其中的 output。

我的數據類似於:

df<-structure(list(id=c(111,111,111,112,112,112), se=c(1,2,3,1,2,3),t1 = c(1, 2, 1, 1,1,3),
                   t2 = c(1, 2, 2, 1,1,4), t3 = c(1, 0, 0, 0,2,1), t4 = c(2, 5, 7,  7,1,2),
                   t5 = c(1, 0, 1, 1,1,1),t6 = c(1, 1, 1, 1,1,1), t7 = c(1, 1, 1 ,1,1,1), t8=c(0,0,0,0,0,0)), row.names = c(NA,
                                                                                                                            6L), class = "data.frame")

我想運行層次聚類分析以確定最佳聚類數。

我如何根據預定義的測量運行聚類 - 在這種情況下例如聚類測量編號 2?

對於層次聚類,您必須定義一個基本元素。 它是計算每個數據點之間距離的方法。 聚類是一項 state 的藝術技術,因此您必須根據數據點的公平分布來定義聚類的數量。 我將在下一個代碼中教您如何執行此操作。 我們將使用您的數據df和 function hclust()比較三種距離方法:

第一種方法是平均距離,它計算所有點的所有距離的平均值。 我們將省略第一個變量,因為它是一個 id:

#Method 1
hc.average <- hclust(dist(df[,-1]),method='average')

第二種方法是完整距離,它計算所有點的所有距離的最大值:

#Method 2
hc.complete<- hclust(dist(df[,-1]),method='complete')

第三種方法是單一距離,它計算所有點的所有距離的最小值:

#Method 3
hc.single <- hclust(dist(df[,-1]),method='single')

使用所有模型,我們可以分析組。

我們可以根據層次樹的高度來定義簇的數量,高度最大的則我們將只有一個簇等於所有數據集。 選擇一個中間值的高度是一個標准。

使用平均方法,高度值為 3 將產生四組,而 4.5 左右的值將產生 2 組:

plot(hc.average, xlab='')

Output:

在此處輸入圖像描述

使用完整的方法,結果相似,但高度的比例尺發生了變化。

plot(hc.complete, xlab='')

Output:

在此處輸入圖像描述

最后,單一方法為組產生不同的方案。 共有三組,即使選擇了中間高度,您也將始終擁有該數量的簇:

plot(hc.single, xlab='')

Output:

在此處輸入圖像描述

您可以使用任何您希望使用cutree() function 來確定數據集群的方法,您可以在其中設置 model object 和集群數。 確定聚類性能的一種方法是檢查組的同質性。 這取決於研究人員的標准。 接下來是將集群添加到數據的方法。 我會選擇最后一個 model 和三組:

#Add cluster
df$Cluster <- cutree(hc.single,k = 3)

Output:

   id se t1 t2 t3 t4 t5 t6 t7 t8 Cluster
1 111  1  1  1  1  2  1  1  1  0       1
2 111  2  2  2  0  5  0  1  1  0       2
3 111  3  1  2  0  7  1  1  1  0       2
4 112  1  1  1  0  7  1  1  1  0       2
5 112  2  1  1  2  1  1  1  1  0       1
6 112  3  3  4  1  2  1  1  1  0       3

function cutree()也有一個名為h的參數,您可以在其中設置高度,我們之前已經討論過,而不是簇k

關於您對使用某種度量來定義集群的懷疑,您可以擴展數據,排除所需的變量,以便該變量具有不同的度量,並可以影響聚類的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM