为了找到最佳的k值,我们并行运行多个Kmeans,并选择具有最佳轮廓分数的一个。在90%的情况下,我们得到的k值在2到100之间。 目前,我们正在使用scikit-learn Kmeans。 对于这样的数据集,聚类需要在具有32个内核和244 RAM的ec2实例上花费大约24小时。
我目前正在研究更快的解决方案。
我已经测试过的内容:
Kmeans + Mean Shift Combination - 稍微好一些 (对于k=1024,需要 ~13h),但仍然很慢。
Kmcuda 库 - 不支持稀疏矩阵表示。将该数据集表示为内存中的密集矩阵需要 ~3TB RAM。
Tensorflow (tf.contrib.factorization.python.ops.KmeansClustering()) - 今天才开始调查,但我可能做错了什么,或者不知道如何操作。在我的第一个测试中,使用单个GPU进行聚类,20k个样本和500个特征,比在1个线程的CPU上慢。
Facebook FAISS - 不支持稀疏表示。
接下来是PySpark MlLib Kmeans。但是,在一个节点上使用它有意义吗?
如果我使用多个GPU,比如使用8个Tesla V-100,会加速我的用例的训练吗?
是否有我没有听说过的神奇库?
还是简单地垂直扩展?