我有自己的预计算数据,用于在 python 中运行 AP 或 Kmeans。然而,当我去运行 Predict() 时,因为我想对数据运行 train() 和 test() 以查看聚类在类或聚类上是否具有良好的准确性,Python 告诉我,predict() 不是可用于“预先计算”的数据。
是否有另一种方法可以在 python 中对集群数据运行训练/测试?
最佳答案
大多数聚类算法(包括 AP)没有明确定义的方法来“预测”新数据。 K 均值是少数足够简单以允许与初始聚类一致的“预测”的情况之一。
现在 sklearn 有一种奇怪的现象,即试图将所有内容压缩到受监督的 API 中。聚类算法具有 fit(X, y)
方法,但忽略 y
,并且应该具有 predict
方法,即使 算法没有这样的能力。
对于亲和性传播,有人在某个时候决定添加一个基于 k 均值的预测
:它始终预测最近的中心。只能使用坐标数据计算平均值,因此该方法因 metric=precompulated 而失败。
如果您想复制此行为,请计算到所有聚类中心的距离,然后选择 argmin,仅此而已。您无法使用“预先计算”指标轻松地将其放入 sklearn API 中。您可以要求用户将距离向量传递给所有“训练”示例以获取预先计算的指标,但只需要其中的一小部分......
在我看来,我宁愿完全删除这个方法:
- 据我所知,在已发表的亲和性传播研究中并未发现
- 亲和性传播基于相似性(“亲和性”)概念,而不是距离或手段
- 此
预测
将不会返回与AP标记的点相同的结果,因为AP使用“传播责任”而不是最近的“中心”。 (当前的 sklearn 实现可能会丢失此信息......) - 无论如何,聚类方法都没有一致的
预测
- 这并不是必需的。 - 如果您想进行这种预测,只需将聚类中心传递给最近邻分类器即可。这就是这里重新实现的,一个隐藏的神经网络分类器。因此,如果您将预测作为第二步(分类),您将获得更大的灵活性。
请注意,它的聚类不常见于进行任何测试训练分割,因为无论如何您都不使用标签,并且仅使用无监督评估方法(如果有的话,因为这些方法)有他们自己的一系列问题)如果有的话 - 你不能在这里可靠地进行“超参数优化”,但必须根据经验和查看数据的人员来选择参数。
关于python - 如何在Python中对 "precomputed"数据运行predict()进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54842990/