如何在“预计算”数据上运行predict()以在Python中进行聚类

时间:2019-02-23 15:12:34

标签: python cluster-analysis

我有自己的预先计算的数据,可以在python中运行AP或Kmeans。但是,当我想对数据运行train()和test()以查看聚类在类或聚类上是否具有良好的准确性时,运行Python()告诉我,predict()不是可用于“预计算”数据。

还有另一种方法可以对python中的集群数据进行训练/测试吗?

1 个答案:

答案 0 :(得分:2)

包括AP在内的大多数聚类算法都没有明确定义的方法来“预测”新数据。 K-means是为数不多的简单案例之一,足以允许与初始聚类一致的“预测”。

现在sklearn有点奇怪,试图将所有内容压缩到一个受监督的API中。聚类算法具有fit(X, y)方法,但是可以忽略y,并且即使算法不具有这种功能,它们也应该具有predict方法。

对于亲和力传播,某人决定在某个时刻基于k均值添加一个predict :它总是预测最近的中心。仅使用坐标数据计算平均值是可能的,因此该方法在metric = precomputing时失败。 如果要复制此行为,请计算到所有群集中心的距离,然后选择argmin,仅此而已。您无法通过“预计算”指标轻松地将其适合sklearn API。您可能需要用户将距离矢量传递给所有用于预计算指标的“训练”示例,但只需要其中的几个...

我认为,我宁愿完全删除此方法:

  1. 我不知道有关亲和力传播的公开研究
  2. 相似性传播基于相似性(“相似性”)的概念,而不是基于距离或均值
  3. predict返回与AP标记的点相同的结果,因为AP使用“传播的责任”而不是最近的“中心”标记点。 (当前的sklearn实现可能正在丢失此信息...)
  4. 集群方法无论如何都没有一致的predict-并不需要。
  5. 如果要进行这种预测,只需将聚类中心传递给最近的邻居分类器。这就是在这里重新实现的一个隐藏的NN分类器。因此,如果您将预测作为第二步(分类),您将获得更大的灵活性。

请注意,将其聚类通常不进行任何测试序列拆分,因为您无论如何都不使用标签,而仅使用无监督的评估方法(如果有的话,因为这些有他们自己的问题)(如果有的话)-您不能在此处可靠地进行“超参数优化”,而必须根据经验和查看数据的人员来选择参数。