2013-04-29 134 views
2

我想使用的馬氏距離K-means算法,因爲我有4個變量是高度相關的(0.85)K-手段和馬氏距離

在我看來,它是更好地使用在這種情況下馬哈拉諾比斯距離。

問題是我不知道如何使用K-means算法在R中實現它。

我認爲我需要「假」它在轉換數據之前的聚類步驟,但我不知道如何。

我嘗試了傳統的kmeans,與標準化數據上的歐式距離,但正如我所說的,存在太多的相關性。

適合< - k均值(mydata.standardize,4)

我也試圖找到一個距離參數,但我認爲它不會在k均值存在()函數。

預期結果是一種應用K-means算法和Mahalanobis距離的方法。

+3

[***你嘗試過什麼?***](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2013-04-29 09:19:17

+1

我們可以等到OP關閉後有機會改善她的問題?你可以擴展你的問題到目前爲止你已經嘗試了什麼,你的預期結果是什麼? – 2013-04-29 09:29:37

+0

對不起,我想,這個問題有一個快速的答案。 我編輯帖子 – Ricol 2013-04-29 09:42:45

回答

9

可以使用方差矩陣的Cholesky分解運行算法, 之前重新調整數據:變換後 的 歐幾里得距離是前的馬哈拉諾比斯距離。

# 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 2016-07-14 16:34:08