【问题标题】:Python kmeans clustering for large datasets用于大型数据集的 Python kmeans 聚类
【发布时间】:2018-04-26 12:08:08
【问题描述】:

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

还有其他 Python kmeans 实现更节省内存吗? 我已经读过Mahout 用于聚类大数据,但我仍然不明白他的优势是什么,用上面提到的数据量是否更节省内存?

【问题讨论】:

    标签: python bigdata k-means


    【解决方案1】:

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

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

    您也可以在那里尝试经典的kmeans implementation,因为您似乎完全脱离了内存要求,而且这种实现可能更高效(当然更可调)。

    在后一种情况下,init、n_init、precompute_distances、algorithm 和可能的 copy_x 都是影响内存消耗的参数。

    此外:如果(!)您的数据是稀疏的;尝试使用sparse-matrices 调用它。 (从阅读 kmeans2-docs 看来,它似乎不受支持,但 sklearn 的 kmeans 支持!)

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 2020-05-03
      • 2011-01-28
      • 2013-03-24
      • 2021-06-05
      • 2014-09-26
      • 2021-05-27
      • 2021-10-09
      相关资源
      最近更新 更多