我们一直在使用 Kmeans 来对日志进行聚类。典型的数据集有 10 mill。具有 100k+ 特征的样本。
为了找到最佳 k - 我们并行运行多个 Kmeans,并选择轮廓得分最佳的一个。在 90% 的情况下,我们最终得到的 k 介于 2 到 100 之间。目前,我们使用 scikit-learn Kmeans。对于这样的数据集,在具有 32 个内核和 244 RAM 的 ec2 实例上进行集群大约需要 24 小时。
我目前一直在研究更快的解决方案。
我已经测试过的:
Kmeans + Mean Shift组合- 好一点(对于 k=1024 --> ~13h),但仍然很慢。
Kmcuda库 - 不支持稀疏矩阵表示。需要约 3TB RAM 才能将该数据集表示为内存中的密集矩阵。
Tensorflow ( tf.contrib.factorization.python.ops.KmeansClustering() ) - 今天才开始调查,但要么我做错了什么,要么我不知道如何烹饪它。在我使用 20k 样本和 500 个特征进行的第一次测试中,单个 GPU 上的集群比单线程 CPU 上的集群慢。
Facebook FAISS - 不支持稀疏表示。
我的列表中的下一个是 PySpark MlLib Kmeans。但它在 1 个节点上有意义吗?
在多个 GPU 上更快地训练我的用例吗?例如,带有 8 个 Tesla …
cluster-analysis machine-learning k-means pyspark tensorflow