为什么k-means的差异统计表明一个聚类,即使显然有两个?


18

我正在使用K-means对数据进行聚类,并且正在寻找一种建议“最佳”聚类编号的方法。间隙统计似乎是找到一个好的簇号的常用方法。

由于某种原因,它返回1作为最佳群集数,但是当我查看数据时,很明显有2个群集:

![1](http://i60.tinypic.com/28bdy6u.jpg)

这就是我所说的R中的差距:

gap <- clusGap(data, FUN=kmeans, K.max=10, B=500)
with(gap, maxSE(Tab[,"gap"], Tab[,"SE.sim"], method="firstSEmax"))

结果集:

> Number of clusters (method 'firstSEmax', SE.factor=1): 1
          logW   E.logW           gap    SE.sim
[1,]  5.185578 5.085414 -0.1001632148 0.1102734
[2,]  4.438812 4.342562 -0.0962498606 0.1141643
[3,]  3.924028 3.884438 -0.0395891064 0.1231152
[4,]  3.564816 3.563931 -0.0008853886 0.1387907
[5,]  3.356504 3.327964 -0.0285393917 0.1486991
[6,]  3.245393 3.119016 -0.1263766015 0.1544081
[7,]  3.015978 2.914607 -0.1013708665 0.1815997
[8,]  2.812211 2.734495 -0.0777154881 0.1741944
[9,]  2.672545 2.561590 -0.1109558011 0.1775476
[10,] 2.656857 2.403220 -0.2536369287 0.1945162

我是在做错什么,还是有人知道一种更好的方法来获得一个好的簇号?

Answers:


37

聚类取决于规模等。有关此问题的讨论,请参阅(尤其是何时应该对数据进行居中和标准化?PCA的协方差或相关性?

这是您以1:1长宽比绘制的数据,揭示了两个变量的比例差异多少:

图1

ķķclusGap

ķFķ

ķ=1个

一种b

图2

ķ=2ķ{1个2345}ķ=2ķķ=1个ķķ=2。此处显示它们只是为了说明一般方法。


这是R产生这些数字的代码。数据与问题中显示的数据大致匹配。

library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
        34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
        38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
  #
  # Estimate optimal cluster count and perform K-means with it.
  #
  gap <- clusGap(xy, kmeans, K.max=10, B=500)
  k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
  fit <- kmeans(xy, k)
  #
  # Plot the results.
  #
  pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
  plot(xy, asp=1, main=title, pch=pch, col=col)
  plot(gap, main=paste("Gap stats,", title))
  abline(v=k, lty=3, lwd=2, col="Blue")
  #
  # Prepare for the next step.
  #
  xy <- apply(xy, 2, scale)
  title <- "Standardized data"
}

好,谢谢您的解释。顺便说一句:您还知道其他任何集群度量标准,例如差距统计吗?我找到了一些,但我不知道k-means通常使用哪个?
MikeHuber

+1。很好的演示,令人印象深刻的是,您似乎已经数字化了OP的数字以获取相同的数据。
变形虫说莫妮卡(

3
@amoeba我盯着散点图,并完全按照您在此处看到的方式输入坐标(也就是说,涉及的数字是我自己的手指:-))。有时最简单的方法是有效的。
呜呜叫声

间隙统计可以用于在单个一维数值数组中查找聚类数吗?
user1971988 2016-4-27

xyxy <- xy[, 1, drop=FALSE]ñ×1个RX一世X一世0

9

xyķ=1个ķ>1个无法拒绝零假设并不能使其成立。如果您想进一步检查技术细节,可以在线获取描述GAP统计信息的方法论论文。

ķ2×2ķ

ķķ=2


+1通过仔细阅读情节,您看到了潜在的问题:做得好!也欢迎Hastie论文的链接支持您的回答。
ub

@whuber:我们进行了有关秤的讨论,不是吗?:)
usεr11852恢复单胞菌说,

在如此不同的背景下,我没有建立联系...。
ub

确实是另外一种情况。我之所以向您提到它,是因为它在那里是“标尺”,而在这里是“标尺”。
usεr11852恢复单胞菌说,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.