根据先前的聚类集预测新数据
Posted
技术标签:
【中文标题】根据先前的聚类集预测新数据【英文标题】:Predict new data based on previously clustered set 【发布时间】:2019-09-22 20:05:21 【问题描述】:我有大量需要聚类的二进制数据。例如
[[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 中的其他聚类算法确实有 predict(),例如 KMeans,但根据我的研究,这不是处理二进制数据时使用的好算法。
所以我被困住了。我不想每次新数据到达时都运行聚类,因为分层算法可以很好地处理大量数据,但我不确定使用哪种算法可以处理二进制数据并提供预测() 功能。
有没有一种方法可以转换二进制数据,以便其他算法(如 KMeans)可以提供有用的输出?或者有没有在 scikit 中实现的完全不同的算法可以工作?我没有绑定到 scikit,所以切换不是问题。
【问题讨论】:
我个人认为,如果您尝试缩写它,您的问题会更容易阅读(和回答) 【参考方案1】:当您想要预测时,请使用分类器,而不是聚类。
在这里,最合适的分类器可能是 1NN 分类器。不过出于性能原因,我会选择 DT 或 SVM。
【讨论】:
Predict 可能是错误的词(尽管我提到各种聚类算法都有 predict() 方法)。我没有可用于训练的标签的干净数据,因此目前无法使用分类器进行预测。 聚类具有“预测”是一个例外,并且您不一定会得到与拟合数据时相同的结果。那是一个工件,而不是 sklearn 的 API 设计,它最初希望所有东西都有fit
和 predict
(这会导致奇怪的情况是你有 fit(X,y)
用于聚类算法,而 y 被忽略了。你想要的是一个分类器训练来预测集群标签。以上是关于根据先前的聚类集预测新数据的主要内容,如果未能解决你的问题,请参考以下文章