-1

我正在尝试运行比较两种不同聚类技术的蒙特卡罗模拟。以下代码根据随机聚类生成数据集,然后应用两种聚类技术(kmeans 和稀疏 k 均值)。

我的问题是这三种技术对它们的集群使用不同的标签。例如,我称之为簇 1,kmeans 可能称之为簇 2,稀疏 k 均值可能称之为簇 3。当我重新生成并重新运行时,标签的差异似乎并不一致。有时标签同意,有时不同意。

谁能提供一种“标准化”这些标签的方法,这样我就可以运行 n 次模拟迭代,而不必每次都手动解决标签差异?

我的代码:

library(sparcl)
library(flexclust)

x.generate=function(n,p,q,mu){
  c=sample(c(1,2,3),n,replace=TRUE)
   x=matrix(rnorm(p*n),nrow=n)
  for(i in 1:n){
   if(c[i]==1){
      for(j in 1:q){
        x[i,j]=rnorm(1,mu,1)
     }
   }
    if(c[i]==2){
      for(j in 1:q){
       x[i,j]=rnorm(1,-mu,1)
     }
   }
  }
  return(list('sample'=x,'clusters'=c))
}

x=x.generate(20,50,50,1)
w=KMeansSparseCluster.permute(x$sample,K=3,silent=TRUE)
kms.out = KMeansSparseCluster(x$sample,K=3,wbounds=w$bestw,silent=TRUE)
km.out = kmeans(x$sample,3)
tabs=table(x$clusters,kms.out$Cs)
tab=table(x$clusters,km.out$cluster)
CER=1-randIndex(tab)

x$clusters、km.out$cluster、kms.out$Cs 的样本输出

> x$clusters 
 [1] 3 2 2 2 1 1 2 2 3 2 1 1 3 1 1 3 2 2 3 1 

> km.out$cluster 
 [1] 3 1 1 1 2 2 1 1 3 1 2 2 3 2 2 3 1 1 3 2 

> km.out$Cs 
 [1] 1 2 2 2 3 3 2 2 1 2 3 3 1 3 3 1 2 2 1 3 
4

4 回答 4

1

最常用的相似性标准之一是Jaccard 距离,例如 Ben-Hur, A. Elissee, A., & Guyon, I. (2002)。一种基于稳定性的聚类数据结构发现方法。太平洋生物计算研讨会(pp.6--17)。

其他包括

于 2013-11-07T19:27:46.173 回答
0

K-means 是一种随机算法。实际上,您必须期望它们是随机排序的。

这就是为什么已建立的集群评估方法(阅读关于集群的维基百科文章,特别是关于“外部验证”的部分)不假设存在集群的一对一映射。

更糟糕的是,一种聚类算法可能找到 3 个聚类,另一种聚类算法可能找到 4 个聚类。

还有层次聚类算法。每个对象都可以属于许多集群,因为集群可以相互嵌套。

还有一些算法,如 DBSCAN 有一个“噪声”的概念:这些对象不属于任何集群。

于 2013-11-09T16:33:42.180 回答
0

正如@Joran 指出的那样,集群是名义上的,因此本身没有顺序。

以下是我想到的两个启发式方法:

  • 从您已经计算的表格开始:当集群很好地对齐时,tab矩阵的轨迹是最大的。
    如果集群的数量很少,您可以通过尝试方法 2 的所有排列与1 : n方法 1 的 $n$ 集群来找到最大值。如果它太大,您可以使用启发式方法,首先将最大匹配项放在对角线等。

  • 同样,两种方法的质心之间的距离矩阵的迹线应该是最小的。

于 2013-11-07T19:56:49.990 回答
0

我不推荐 Jaccard 距离(即使它很有名且成熟),因为它受集群大小的巨大影响。这是因为它计算的是节点对而不是节点。我还发现具有统计风格的方法没有抓住重点。关键是分区(簇)的空间具有漂亮的格子结构。在该结构中工作得很好的两个距离是信息变化 (VI) 距离和拆分/连接距离。另请参阅stackexchange上的这个答案:

https://stats.stackexchange.com/questions/24961/comparing-clusterings-rand-index-vs-variation-of-information/25001#25001

它包括此处讨论的所有三个距离的示例(Jaccard、VI、拆分/连接)。

于 2013-11-11T11:42:36.147 回答