繁体   English   中英

适用于大型数据集的Python kmeans聚类

[英]Python kmeans clustering for large datasets

我需要使用词袋(在本例中为特征袋)来生成描述符向量,以对KTH视频数据集进行分类。 为此,我需要使用kmeans聚类算法对提取的特征进行聚类并找到代码本。 从数据集中提取的特征形成大约75000个向量,每个向量包含100个元素。 因此,我在Ubuntu中使用scipy.cluster.kmeans2实现面临内存问题。 我进行了一些测试,发现每个32000 vector带有100个元素,使用的内存量约为20GB(我的总内存为32GB)。

是否有其他Python kmeans实现更有效地利用内存? 我已经读过Mahout关于集群化大数据的信息,但是我仍然不明白他的优势是什么,使用上述提到的数据量是否更节省内存?

当有很多样本时,请考虑使用sklearn的 MiniBatchKMeans ,它是针对这种情况的类似于SGD的方法构建! (一个更像教程的介绍 ,它没有解决内存使用问题,但是我希望它对于较大的n_samples更好。当然,内存还取决于许多其他参数,例如k……如果n_features很大, 它将不会对内存的帮助;但这不是您的问题)

在这种情况下,您应该仔细调整您的小批量大小。

您也可以在那里尝试经典的kmeans实现 ,因为您似乎对内存的需求还远远不够,也许这种实现效率更高(可以肯定地更可调)。

在后一种情况下,init,n_init,precompute_distances,算法以及也许copy_x都是对内存消耗有影响的参数。

而且:if(!)您的数据稀疏; 尝试使用稀疏矩阵调用它。 (从阅读kmeans2-docs看来,它不受支持,但是sklearn的kmeans可以支持!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM