Как указать метрику расстояния, пока для kmeans в R?
Я выполняю кластеры kmeans в R с двумя требованиями:
-
Мне нужно указать мою собственную функцию расстояния, теперь это коэффициент Пирсона.
-
Я хочу сделать кластеризацию, которая использует среднее количество членов группы как центроидов, а не фактического члена.
Причиной этого требования является то, что я считаю, что использование среднего значения как центра тяжести имеет больше смысла, чем использование фактического члена, так как члены всегда не находятся рядом с реальным центроидом. Пожалуйста, поправьте меня, если я ошибаюсь.
Сначала я попробовал функцию kmeans
в пакете stat
, но эта функция не позволяет настраивать дистанционный метод.
Затем я нашел pam
функцию в пакете cluster
. Функция pam
позволяет настраивать метрику расстояния, принимая объект dist
как параметр, но мне кажется, что, делая это, он принимает фактических членов как центроидов, чего я не ожидаю. Поскольку я не думаю, что он может делать все вычисления расстояния с помощью только матрицы расстояний.
Итак, есть ли простой способ в R выполнить кластеризацию kmeans, которая удовлетворяет обоим моим требованиям?
Ответы
Ответ 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>