2013-04-29 131 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