我正在尝试将一个包含约1,100,000个观察值的数据集聚类,每个观察值具有三个值。由于我不知道正确的群集数量,因此尝试了分层群集,但是它需要4095 GB内存才能解决该问题。作为替代方案,我使用K-means并解决了k = 2到10的问题。现在的问题是我找不到比较这些群集性能的方法。 This website建议了十种“暂时”猜测最佳群集数的方法,但是它们不适用于相当大的数据集并返回内存错误消息。
我的问题:是否有任何方法(程序包)可以执行相同的任务,但是此内存不是贪婪的,以便我可以运行测试?
我的机器具有64 GB的RAM,其虚拟内存为171 GB。
谢谢!
最佳答案
Elbow方法仅使用已经通过k均值计算的统计信息,因此它甚至不访问数据。但是,它甚至没有很好的定义,而且除用于课堂上的2d玩具数据外,效果非常差。所以我不推荐它。至少使用WSS /(k + 1)代替或更佳的VRC。
k均值很可能不适用于您的数据。准备接受可能没有一个好的结果,因为您的数据不满足k均值的要求(例如,所有属性具有相同的重要性和规模,线性且没有严重偏斜,并且所有聚类具有相似的扩展)。特别是最后一个-集群的类似扩展-仅在您的数据实际上是由k个纯信号和i.d生成时才成立。噪声。如果您的数据来自用户,则可能无法使用。在这种情况下,上述启发式方法在选择k时也无济于事。
现在针对您的可伸缩性问题:只需使用一个子样本。
K均值是平均值,大多数质量指标也是如此。对于平均值,子采样将为您提供与整个数据集非常相似的结果。因此,仅对您的点进行10k甚至仅1k的子采样,并仅使用该集合进行评估(甚至用于聚类)。如有疑问,请使用不同的子样本进行几次评估。
关于python - 如何比较大型数据集的簇数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58574330/