<分区>
我正在文本文档数据集(以词频为特征)上测试一些聚类算法。运行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 也找不到集群 并且仍然需要永远。 (我在这里使用默认设置)。可能 一旦他们发现数据中的结构,这种情况就会发生巨大变化?
- 多少原始计算能力是这些类型的限制因素 算法?我能否将 ~ 300,000 个文件与 ~ 30 每个功能都在普通台式计算机上吗?还是有意义 为这些事情使用计算机集群?
非常感谢任何帮助!测试在 Mac mini、2.6 Ghz、8 GB 上运行。数据输入是 numpy array .