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()`