簡體   English   中英

如何獲得層次平均聚類的差距統計

[英]How to get gap statistic for hierarchical average clustering

我基於“平均鏈接”執行層次聚類分析在基礎 r 中,我使用

dist_mat <- dist(cdata, method = "euclidean")
hclust_avg <- hclust(dist_mat, method = "average")

我想計算差距統計數據以確定最佳集群數。 我使用“集群”庫和 clusGap function。 由於我無法通過 hclust 解決方案,也無法在 clusGap function 中指定平均層次聚類,因此我使用以下幾行:

cluster_fun <- function(x, k) list(cluster = cutree(hclust(dist(x, method = "euclidean"), method="average"), k = k))
gap_stat <- clusGap(cdata, FUN=cluster_fun, K.max=10, B=50)
print(gap_stat)

但是,這里我無法檢查集群解決方案。 所以,我的問題是 - 我可以確定差距統計是在與 hclust_avg 相同的解決方案上計算的嗎?

有沒有更好的方法來做到這一點?

是的,應該是一樣的。 在 clusGap function 中,它為您提供的每個 k 調用 cluster_fun,然后計算集群內的池化平方和,如本文所述,這是調用自定義 function 的 clusGap 內部調用的代碼位:

W.k <- function(X, kk) {
        clus <- if (kk > 1) 
            FUNcluster(X, kk, ...)$cluster
        else rep.int(1L, nrow(X))
        0.5 * sum(vapply(split(ii, clus), function(I) {
            xs <- X[I, , drop = FALSE]
            sum(dist(xs)^d.power/nrow(xs))
        }, 0))
    }

並從這里計算差距統計數據。

您可以使用一些自定義代碼計算間隙統計信息,但為了重現性等,使用它可能更容易?

暫無
暫無

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

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