簡體   English   中英

R:如何從樹狀圖中獲得大致相同大小的簇

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

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