【问题标题】:Computation of clusters [closed]集群的计算[关闭]
【发布时间】:2016-08-23 10:13:43
【问题描述】:

我正在文本文档数据集(以词频作为特征)上测试一些聚类算法。一个接一个地运行Scikit Learn Clustering 的一些方法,下面是它们需要多长时间~ 50,000 个文件,每个文件有 26 个特征。每次收敛所需的时间有很大差异,我输入的数据越多,就越极端;其中一些(例如 MeanShift)在数据集增长到一定大小后才停止工作。

(下面给出的时间是从脚本开始算起的总时间,即 KMeans 耗时 0.004 分钟,Meanshift (2.56 - 0.004) 分钟等)

shape of input: (4957, 26)

KMeans:    0.00491824944814
MeanShift:     2.56759268443
AffinityPropagation:     4.04678163528
SpectralClustering:     4.1573699673
DBSCAN:     4.16347868443
Gaussian:     4.16394021908
AgglomerativeClustering:     5.52318491936
Birch:     5.52657626867

我知道一些聚类算法本质上是计算密集型的(例如章节 here 概述了 Kmeans 的需求与数据点的数量成线性关系,而分层模型是 O(m2logm))。 所以我想知道

  • 如何确定这些算法中的每一个可以有多少数据点 处理;并且是输入文件/输入特征的数量相等 在这个等式中相关吗?
  • 计算强度在多大程度上取决于聚类 设置——例如Kmeans 中的距离度量还是 DBSCAN 中的 e
  • 聚类成功是否影响计算时间?一些算法 例如 DBSCAN 很快就完成了 - 可能是因为他们找不到 数据中的任何聚类; Meanshift 也找不到集群 仍然需要永远。 (我在这里使用默认设置)。可能 一旦他们发现数据中的结构,情况就会发生巨大变化?
  • 多少是原始计算能力是这些类型的限制因素 算法?我能用 ~ 30 个文件集群 ~ 300,000 个文件吗 普通台式计算机上的每个功能?或者这样做有意义吗 为这类事情使用计算机集群?

非常感谢任何帮助!测试在 Mac mini、2.6 Ghz、8 GB 上运行。数据输入是numpy array

【问题讨论】:

    标签: python numpy nlp cluster-analysis k-means


    【解决方案1】:

    这个问题太笼统了。

    事实上,这些问题中的大多数都没有答案。

    例如,k-means 不是简单的线性 O(n),而是因为直到收敛所需的迭代次数往往会随着数据集的大小而增长,所以它比这更昂贵(如果运行直到收敛)。

    层次聚类可以是从 O(n log n) 到 O(n^3) 的任何地方,主要取决于它的实现方式和链接。如果我没记错的话,sklearn 的实现是 O(n^3) 算法。

    有些算法有参数可以提前停止。在他们真正完成之前!对于k-means,如果你想真正完成算法,你应该使用tol=0。否则,如果相对改善小于这个因素,它就会提前停止——这可能为时过早。 MiniBatchKMeans 永远不会收敛。因为它每次只查看数据的随机部分,所以除非您选择固定的迭代次数,否则它将永远持续下去。

    永远不要试图从小数据集中得出结论。你需要达到你的限制。 IE。每种算法在 1、2、4 和 12 小时内仍然可以处理的最大数据集是多少? 要获得有意义的结果,您的运行时间应该是 小时,除非算法只是在此之前耗尽内存 - 那么您可能有兴趣预测在内存耗尽之前可以扩展多远 - 假设你有 1 TB 的 RAM,你还能处理多大的数据?

    问题是,您不能简单地对不同大小的数据集使用相同的参数。如果您没有很好地选择参数(例如 DBSCAN 将所有内容置于噪声中,或者将所有内容置于一个集群中),那么您也无法从中得出结论。

    然后,可能只是实施错误。 sklearn 中的 DBSCAN 最近变得快了很多。它仍然是相同的算法。所以 2 年前完成的大多数结果都是错误的,因为 sklearn 中 DBSCAN 的实现很糟糕......现在它好多了,但它是最优的吗?可能不是。这些算法中的任何一个都可能存在类似的问题!

    因此,做一个好的聚类基准真的很困难。事实上,我已经很久没有看到一个好的基准了。

    【讨论】:

    • 谢谢,这很有帮助!如果我对您的理解正确,那么继续试错是我能做的最好的。关于您提到的“良好基准”,在哪里可以找到类似的东西?谢谢!
    • 首先,您应该关注获得有用的结果。很可能只有一个(或没有)通过精心选择的参数产生有用的结果。然后,如果您非常幸运,相同的参数适用于多个文件...
    • 好吧,听起来不错/令人鼓舞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2012-11-30
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多