【发布时间】: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