如何比较大型数据集的簇数?

问题描述 投票:2回答:2

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

我的问题:是否有任何方法(程序包)可以执行相同的任务,但是此内存不是贪婪的,以便我可以运行测试?

我的机器具有64 GB的RAM,其虚拟内存为171 GB。谢谢!

python r bigdata cluster-analysis data-mining
2个回答
0
投票

这是我发现并被修改为“暂时”的代码,建议使用elbow methodwithin-cluster sum of the squares在@ G5W上基于om进行最佳聚类评论

# 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")

0
投票

Elbow方法仅使用已经由k-means计算的统计信息,因此它甚至不访问数据。但是,它甚至没有很好的定义,而且除用于课堂上的2d玩具数据外,效果非常差。所以我不推荐它。至少使用WSS /(k + 1)代替或更好使用VRC。

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

现在您的可伸缩性问题:只需使用subsample

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

© www.soinside.com 2019 - 2024. All rights reserved.