Подтвердить что ты не робот

Как указать метрику расстояния, пока для kmeans в R?

Я выполняю кластеры kmeans в R с двумя требованиями:

  • Мне нужно указать мою собственную функцию расстояния, теперь это коэффициент Пирсона.

  • Я хочу сделать кластеризацию, которая использует среднее количество членов группы как центроидов, а не фактического члена. Причиной этого требования является то, что я считаю, что использование среднего значения как центра тяжести имеет больше смысла, чем использование фактического члена, так как члены всегда не находятся рядом с реальным центроидом. Пожалуйста, поправьте меня, если я ошибаюсь.

Сначала я попробовал функцию kmeans в пакете stat, но эта функция не позволяет настраивать дистанционный метод.

Затем я нашел pam функцию в пакете cluster. Функция pam позволяет настраивать метрику расстояния, принимая объект dist как параметр, но мне кажется, что, делая это, он принимает фактических членов как центроидов, чего я не ожидаю. Поскольку я не думаю, что он может делать все вычисления расстояния с помощью только матрицы расстояний.

Итак, есть ли простой способ в R выполнить кластеризацию kmeans, которая удовлетворяет обоим моим требованиям?

4b9b3361

Ответ 1

Проверьте flexclust пакет:

Основная функция kcca реализует общую структуру для кластерный анализ k-centroids, поддерживающий произвольные дистанционные меры и центроида.

В пакет также входит функция distCor:

R> flexclust::distCor
function (x, centers) 
{
    z <- matrix(0, nrow(x), ncol = nrow(centers))
    for (k in 1:nrow(centers)) {
        z[, k] <- 1 - .Internal(cor(t(x), centers[k, ], 1, 0))
    }
    z
}
<environment: namespace:flexclust>