K-means和Mahalanobis距离

时间:2013-04-29 09:00:23

标签: r

我想在K-means算法中使用Mahalanobis距离,因为我有4个高度相关的变量(0.85)

在我看来,在这种情况下使用马哈拉诺比斯距离会更好。

问题是我不知道如何使用K-means算法在R中实现它。

我认为我需要在聚类步骤之前“伪造”它来转换数据,但我不知道如何。

我尝试了经典的kmeans,标准化数据的欧几里德距离,但正如我所说,有太多的相关性。

  

fit< - kmeans(mydata.standardize,4)

我也试图找到一个距离参数,但我认为它在kmeans()函数中不存在。

预期结果是一种将K-means算法应用于马哈拉诺比斯距离的方法。

2 个答案:

答案 0 :(得分:12)

您可以在运行算法之前重新调整数据, 使用方差矩阵的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包中。

答案 1 :(得分:0)

您可以在Brian S. Everitt的书的第10页中找到“马氏距离的公式”,“ R和S-PLUS®伴侣到多元分析”。当样本协方差是恒等矩阵时,欧氏距离是马哈拉诺比斯的一种特殊情况。那么,在“ y”中具有重新缩放的数据的欧氏距离就是马哈拉诺比斯。

df