[英]R: How to get clusters of roughly the same size from dendrogram
我試圖根據學生的興趣對他們進行分組。 小組應該有大致相同的規模,即使這意味着有些學生如果不適合任何小組,就不會真正與小組成員分享興趣。
我使用了 R 的hclust()
函數並得到了一個非常好的樹狀圖 - 所以它完美地工作 - 但是當我嘗試使用cutree()
設置集群時,我可以調整h
(樹的高度)或k
(所需的組大小)。 問題是,即使我將組大小設置為某個值,我也會得到一些更小的組。
如果你看繪制的樹,有一些學生的興趣與其他學生完全不同,所以我想這就是它發生的原因。
為了防止這種情況,我想要做的是“禁止”某個最小規模的組,所以如果有這樣的組,它們會被添加到另一個小組或類似的東西中。 有沒有一種簡單的方法可以做到這一點,或者我是否必須編寫自己的函數來在聚類后進行一些清理?
我在 StackOverflow 上發現了類似的問題(例如這個),但它們都沒有被標記為已回答,在我提到的特定情況下,恐怕我並沒有真正得到建議的解決方案。
預先感謝您的意見!
梅爾
正如 Merle 在評論中指出的那樣,該解決方案不必基於層次聚類方法。
您可以使用anticlust包中的balance_clustering balanced_clustering()
函數來創建大小相等的集群。 這是使用 iris 數據集的示例:
library(anticlust)
data(iris)
iris$group <- balanced_clustering(
iris[, -5],
K = nrow(iris) / 5 # 5 plants per group
)
輸出是指示組成員資格的向量。 例如,這是一組相似的植物:
subset(iris, group == 1)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species group
#> 1 5.1 3.5 1.4 0.2 setosa 1
#> 5 5.0 3.6 1.4 0.2 setosa 1
#> 8 5.0 3.4 1.5 0.2 setosa 1
#> 18 5.1 3.5 1.4 0.3 setosa 1
#> 40 5.1 3.4 1.5 0.2 setosa 1
請注意,我使用四個數字標准進行聚類,而不是“物種”。
同樣可以使用anticlust::matching()
來完成,您可以在其中指定組的大小,但是:
matching(iris[, -5], p = 5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.