Функция и формат данных для векторной кластеризации в R - PullRequest
0 голосов
/ 07 марта 2012

Мне нужно запустить кластеризацию по корреляциям векторов строк данных, то есть вместо того, чтобы использовать отдельные переменные в качестве переменных предикторов кластеризации, я намерен использовать корреляции между вектором переменных между строками данных.

Есть ли в R функция, которая выполняет векторную кластеризацию. Если нет, и мне нужно сделать это вручную, какой формат данных подходит для таких функций, как cmeans или kmeans? Скажем, у меня есть m переменных и n строк данных, m переменных составляют один вектор для каждой строки данных. поэтому у меня есть n X n матрица для корреляции или косинуса. Может ли эта матрица быть подключена к функции кластеризации напрямую или требуется определенная обработка?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Вы можете преобразовать свою матрицу корреляции в матрицу различий, например 1-cor(x) (или 2-cor(x) или 1-abs(cor(x))).

# Sample data
n <- 200
k <- 10
x <- matrix( rnorm(n*k), nr=k )
x <- x * row(x) # 10 dimensions, with less information in some of them

# Clustering
library(cluster)
r <- pam(1-cor(x), diss=TRUE, k=5)

# Check the results
plot(prcomp(t(x))$x[,1:2], col=r$clustering, pch=16, cex=3)
1 голос
/ 08 марта 2012

R кластеризация часто немного ограничена. Это конструктивное ограничение R, поскольку оно сильно зависит от низкоуровневого кода C для производительности. Быстрая реализация kmeans, включенная в R, является примером такого низкоуровневого кода, который, в свою очередь, связан с использованием евклидова расстояния.

Существует множество расширений и альтернатив, доступных в сообществе вокруг R. Например, есть PAM, CLARA и CLARANS. Они не точно k-средства, но тесно связаны. Где-то должно быть «сферическое k-среднее», разумное для косинусного расстояния. Существует целое семейство иерархических кластеров (которые масштабируются довольно плохо - обычно O(n^3), с O(n^2) в нескольких исключениях - но очень легко понять концептуально).

Если вы хотите изучить еще несколько вариантов кластеризации, взгляните на ELKI , он должен позволять кластеризацию (с различными методами, включая k-средних) по расстояниям, основанным на корреляции (и он также включает такое расстояние функции). Это не R , но Java. Так что, если вы обязаны использовать R, он не будет работать для вас.

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