R:在 cmeans 中实现 Mahalanobis [e1071]

Posted

技术标签:

【中文标题】R:在 cmeans 中实现 Mahalanobis [e1071]【英文标题】:R: Mahalanobis implementation in cmeans [e1071] 【发布时间】:2014-11-23 22:47:44 【问题描述】:

我只是想知道 cmeans 函数 [在 e1071 包中] 是否有一种方法可以使用马氏距离执行聚类?

非常感谢

【问题讨论】:

您有答案还是在寻找其他答案? 非常感谢您的及时回复。我曾尝试在 fanny 函数中使用 mahalanobis dist。但是,我不确定这两个函数是否对数据执行类似的 custering,以及 fanny 中的成员指数和 cmeans 中的 m 模糊化之间有什么区别。干杯 【参考方案1】:

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

因此,对于马氏距离,您可以使用 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

虽然不完全一致,但可以看到非常接近。您还会注意到,fanny 正在指定平方欧几里得距离,这就是 cmeans 正在做的事情。这种等效性在 fanny 帮助页面 ?fanny 的度量下注明。

【讨论】:

以上是关于R:在 cmeans 中实现 Mahalanobis [e1071]的主要内容,如果未能解决你的问题,请参考以下文章

使用 D3 和 Shiny 在 R 中实现 `identify()`

试图在 R 中实现 K-Nearest Neighbor,不知道从哪里开始

在 R 中实现的配对 t 检验的研究论文

在 R 中实现标准软件设计模式(专注于 MVC)

在 R/python/MOA 中实现的在线时间序列算法

支持向量机分类及在R中实现