2013-04-29 3 views
2

Я хотел бы использовать Махаланобис расстояние в K-означают алгоритм, потому что у меня есть 4 переменных, которые сильно коррелируют (0,85)K-средства и расстояние Махаланобиса

Мне кажется, что лучше использовать расстояние Махаланобиса в этом случае.

Проблема заключается в том, что я не знаю, как реализовать ее в R с помощью алгоритма K-средних.

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

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

< подходят - kmeans (mydata.standardize, 4)

Я также попытался найти параметр расстояния, но я думаю, что не существует в kmeans функция().

Ожидаемый результат - способ применения алгоритма K-средних с расстоянием Махаланоби.

+3

[*** Что вы пробовали? ***] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+1

Можем ли мы ждать с закрытием до тех пор, пока OP не будет возможность улучшить ее вопрос? Можете ли вы расширить свой вопрос тем, что вы пробовали до сих пор, и каков ваш ожидаемый результат? –

+0

Извините, я подумал, был быстрый ответ на этот вопрос. Я отредактировал сообщение – Ricol

ответ

9

Вы можете масштабировать данные перед запуском алгоритма, используя разложение Холецкой матрицы дисперсии: евклидова расстояния после преобразования этого расстояния Махаланобиса раньше.

# Sample data 
n <- 100 
k <- 5 
x <- matrix(rnorm(k*n), nr=n, nc=k) 
x[,1:2] <- x[,1:2] %*% matrix(c(.9,1,1,.9), 2, 2) 
var(x) 

# Rescale the data 
C <- chol(var(x)) 
y <- x %*% solve(C) 
var(y) # The identity matrix 

kmeans(y, 4) 

Но это предполагает, что все кластеры имеют одинаковую форму и ориентации, как и все данные. Если это не так, вы можете посмотреть модели, которые явно допускают эллиптические кластеры, , например, в пакете mclust.

+0

У вас есть ссылка, которая показывает евклидово расстояние после трансформации - расстояние Махаланобиса раньше? – Mahsa

Смежные вопросы