[英]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.