我一直在使用mini-batch k-means使用scikit-learn实现来聚类大约45000个观察数据集,每个数据集大约有170个特征。我注意到,当k增加时,算法无法返回指定数量的聚类,如果k超过数据集中观察数量的约30%(45000的30%)并继续增加,则返回的聚类数量会增加不再增加了。
我想知道这是否与scikit-learn中实现算法的方式有关,或者是否与其定义有关。我一直在研究它所提出的论文,但我无法弄清楚为什么会这样。
有没有人经历过这个?现在有人如何解释这种行为?
答案 0 :(得分:3)
k-means可能会失败,因为群集可以消失。
当你有很多重复时,这是最明显的。
如果您的所有数据点都相同,为什么会出现多个(非空)群集呢?
据我所知,它并不特定于小批量k-means。某些实现允许您指定群集退化时要执行的操作,例如:使用最远点作为新的集群中心,丢弃集群,或保持不变(也许它会再次获得一个点)。
答案 1 :(得分:0)
如果你正在使用K-means,你需要告诉算法要使用的集群数量,它无法说明问题。
通过使用距离函数实现的聚类方法,以便使用定义的度量(如eucludian)查找(全局但不是真正的)最小值。 您遇到的问题与如何确定群集数量有关,这是一个启发式问题,因为当您增加要使用的群集数量时,目标函数会更快地减少,因此增加群集数量将无法让您找到最佳群集数据集中的聚类。你会遇到没有真正不同的嘈杂集群。
你可以参考Jain,A.K。(2010)。数据聚类:超越K-means 50年。模式识别快报,31(8),651-666。 关于这个问题。