我有大量的二进制数据需要集群。例如
[[0 1 1 0 ... 0 1 0 1 ],
[1 0 1 1 ... 0 0 1 1 ],
...
[0 0 1 0 ... 1 0 1 1 ]]
据我了解,针对二进制数据的最佳聚类算法是分层的,例如聚类聚类。因此,我使用scikit实现了这一点。
我有一个非常大的数据集,并且所有时间都在不断涌入新数据,我想将其聚集到以前的聚集组中。因此,我的想法是对现有数据进行随机抽样,对其上运行AgglomerativeClustering,然后使用joblib将结果保存到文件中。
然后,当一组新的数据到达时,加载之前的群集并调用predict()找出可能落在哪里。几乎就像我正在训练类似于分类器但没有标签的集群。问题在于,AgglomerativeClustering没有predict()方法。 scikit中的其他聚类算法确实具有诸如KMeans之类的predict(),但根据我的研究,在处理二进制数据时,这不是一个很好的算法。
所以我被困住了。我不想每次新数据到达时都运行聚类,因为层次算法可以很好地处理大量数据,但是我不确定使用哪种算法可以处理二进制数据并提供预测()功能。
有没有一种方法可以转换二进制数据,以便其他算法(例如KMeans)可以提供有用的输出?还是有一个完全不同的算法可以在scikit中实现而无法实现?我不依赖scikit,因此切换不是问题。
答案 0 :(得分:0)
要进行预测时,请使用分类器,而不要使用聚类。
在这里,最合适的分类器可能是1NN分类器。出于性能原因,我还是选择DT或SVM。