【问题标题】:How to compare the number of clusters for large data sets?如何比较大型数据集的集群数量?
【发布时间】:2020-02-22 17:44:51
【问题描述】:

我正在尝试对包含大约 1,100,000 个观察值的数据集进行聚类,每个观察值具有三个值。由于我不知道正确的集群数量,我尝试了分层集群,但它需要 4095 GB 内存才能解决问题。作为替代方案,我使用 K-means 并解决了 k=2 到 10 的问题。现在的问题是我找不到比较这些集群性能的方法。 This website 建议了十种方法来“暂时”猜测最佳聚类数,但它们不适用于相当大的数据集并返回内存错误消息。

我的问题:是否有任何方法(包)可以完成相同的任务但不是这种内存贪婪以便我可以运行测试?

我的机器有 64 GB 的 RAM,它的虚拟内存是 171 GB。 谢谢!

【问题讨论】:

  • 您所指的网站列出了肘部方法作为选择集群数量的一种方式。由于您成功地对 k=2 到 10 的数据进行聚类,因此只需计算聚类内的平方和。
  • @G5W 我尝试使用他们为肘部方法提供的代码,但它返回错误消息。您能想到什么“调整”可以解决问题吗?
  • 是的,不要使用fviz_nbclust,而是自己计算平方的簇内总和(然后绘制它们。见Wikipedia
  • 您可以查看高性能任务视图(google it),看看是否有针对大规模集群的包...

标签: python r bigdata cluster-analysis data-mining


【解决方案1】:

这是我找到并修改为“暂时”建议可能的最佳集群的代码,基于 om @G5W 评论使用 elbow method 和 within-cluster sum of the squares

# Determine number of clusters
wss <- (nrow(data)-1)*sum(apply(data,2,var)) 
for (i in 2:9) { 
   wss[i] <- sum(kmeans(data, centers = i)$withinss) 
}  

# Plot the clusters 
plot(1:9, wss, type = "b", xlab = "Number of Clusters", 
   ylab = "Within groups sum of squares")

【讨论】:

    【解决方案2】:

    Elbow 方法仅使用已通过 k-means 计算的统计量,因此它甚至不访问数据。然而,它甚至没有很好的定义,而且除了在课堂上使用的 2d 玩具数据外,它的工作效率也非常差。所以我不会推荐它。至少使用 WSS/(k+1) 代替或更好地使用 VRC。

    很可能 k-means 不适用于您的数据。准备好接受可能没有一个结果是好的,因为您的数据不满足 k-means 的要求(例如,所有属性具有相同的重要性和规模,是线性的并且没有严重倾斜,并且所有集群都具有相似的扩展)。特别是最后一个 - 类似的集群扩展 - 仅当您的数据实际由 k 个纯信号和 i.i.d. 生成时才成立。噪音。如果您的数据来自用户,那么它可能无法正常工作。在这种情况下,上述启发式方法也无助于选择 k...

    现在解决您的可扩展性问题:只需使用 subsample。

    K-means 是平均的,大多数质量度量也是如此。对于平均值,二次抽样将为您提供与整个数据集非常相似的结果。因此,只需对 10k 甚至 1k 点进行二次抽样,并仅使用该集合进行评估(甚至用于聚类)。如有疑问,请使用不同的子样本进行多次评估。

    【讨论】:

    • 数据方面,变量是1,100,000个推特账号的好友数、关注者数和状态。我认为变量在某种程度上同样重要,但正如你提到的,数据严重向右倾斜。当然,在使用 k-means 之前,我对数据进行了对数转换,然后对数据进行了标准化。根据我的新解释,您仍然认为 K-means 不合适吗?如果没有,你会推荐什么方法?如果您对如何进行二次抽样以及如何将结果扩展到整个样本进行更多解释(或推荐来源),我也将不胜感激。
    • 其实我怀疑这个数据中会有集群。日志是有问题的,因为 log(0)=-infinity。你做过 PCA 来可视化数据吗?如果在 PCA 中看不到集群,KMeans 也不会找到好的集群。
    • 我在值上加了 1 以规避 log(0) 问题。至于 PCA,这是由三个主要成分中的每一个解释的方差结果:0.79423096, 0.14889490, 0.05687413。你还觉得Kmeans在这里没用吗?如果是这样,你能想到更合适的技术吗?同样,我试图根据他们的朋友、关注者和状态的数量来对 twitter 用户进行聚类。
    • 好吧,我不知道剧情长什么样。但是前两个分量中 85% 的方差意味着 2d 图可以让您很好地了解 k-means 的作用。如果那里只有一个大块,那么任何 k-means 拆分都将与随机一样好。
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多