Как получить статистику разрыва для иерархической средней кластеризации - PullRequest
0 голосов
/ 23 октября 2019

Я выполняю иерархический кластерный анализ на основе «средней связи». В базе r я использую

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

Я хочу рассчитать статистику разрывов, чтобы определить оптимальное количество кластеров. Я использую библиотеку 'cluster' и функцию clusGap. Поскольку я не могу передать решение hclust и не указать среднюю иерархическую кластеризацию в функции clusGap, я использую следующие строки:

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?

Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 24 октября 2019

Да, это должно быть так же. В функции clusGap он вызывает cluster_fun для каждого предоставленного вами k, а затем вычисляет объединенную сумму кластеров в виде суммы квадратов вокруг, как описано в paper . Это фрагмент кода, который вызывается в 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))
    }

И отсюда вычисляется статистика разрыва.

Вы можете вычислить статистику разрыва, используя некоторый пользовательский код, но для воспроизводимости и т. д., это может бытьпроще это использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...