R:Mahalanobis在cmeans中实施[e1071]

时间:2014-09-29 13:57:21

标签: r fuzzy-c-means

我只是想知道cmeans函数[在e1071包中]是否有办法使用Mahalanobis距离执行聚类?

非常感谢

1 个答案:

答案 0 :(得分:2)

e1071包没有mahalanobis选项。但是,您可以查看cluster包和fanny函数。根据帮助页面,它还计算数据到k-clusters的模糊聚类。使用此功能,您可以提供自己的距离矩阵。

因此,对于马哈拉诺比斯距离,您可以使用dist计算距离矩阵,然后运行群集。

require(cluster)
set.seed(123)
x<-rbind(matrix(rnorm(100,sd=0.3),ncol=2),
         matrix(rnorm(100,mean=1,sd=0.3),ncol=2))
y <- dist(x, "mahalanobis")
fanny(y, k=2)

鉴于您对这些函数之间的等价性的可理解的关注是比较它们的一个例子:

require(e1071)
cl<-cmeans(x,centers=2,iter.max=20,dist="euclidean",method="cmeans",m=2)
fl <- fanny(x, k=2, maxit=20, metric="SqEuclidean", memb.exp=2)

> head(cl$membership)
             1           2
[1,] 0.9948729 0.005127121
[2,] 0.3647778 0.635222221
[3,] 0.9290126 0.070987385
[4,] 0.7588260 0.241174043
[5,] 0.9282550 0.071745007
[6,] 0.9599231 0.040076886
> head(fl$membership)
          [,1]        [,2]
[1,] 0.9948722 0.005127775
[2,] 0.3647890 0.635211040
[3,] 0.9290171 0.070982905
[4,] 0.7588304 0.241169649
[5,] 0.9282575 0.071742489
[6,] 0.9599221 0.040077878

虽然不完全相同,但你可以看到非常接近。您还会注意到,范妮正在指定欧几里德距离的平方,这正是cmeans正在做的事情。这种等效性在指标下的范围帮助页面?fanny上注明。