我有自己的预先计算的数据,可以在python中运行AP或Kmeans。但是,当我想对数据运行train()和test()以查看聚类在类或聚类上是否具有良好的准确性时,运行Python()告诉我,predict()不是可用于“预计算”数据。
还有另一种方法可以对python中的集群数据进行训练/测试吗?
答案 0 :(得分:2)
包括AP在内的大多数聚类算法都没有明确定义的方法来“预测”新数据。 K-means是为数不多的简单案例之一,足以允许与初始聚类一致的“预测”。
现在sklearn有点奇怪,试图将所有内容压缩到一个受监督的API中。聚类算法具有fit(X, y)
方法,但是可以忽略y
,并且即使算法不具有这种功能,它们也应该具有predict
方法。
对于亲和力传播,某人决定在某个时刻基于k均值添加一个predict
:它总是预测最近的中心。仅使用坐标数据计算平均值是可能的,因此该方法在metric = precomputing时失败。
如果要复制此行为,请计算到所有群集中心的距离,然后选择argmin,仅此而已。您无法通过“预计算”指标轻松地将其适合sklearn API。您可能需要用户将距离矢量传递给所有用于预计算指标的“训练”示例,但只需要其中的几个...
我认为,我宁愿完全删除此方法:
predict
将不返回与AP标记的点相同的结果,因为AP使用“传播的责任”而不是最近的“中心”标记点。 (当前的sklearn实现可能正在丢失此信息...)predict
-并不需要。请注意,将其聚类通常不进行任何测试序列拆分,因为您无论如何都不使用标签,而仅使用无监督的评估方法(如果有的话,因为这些有他们自己的问题)(如果有的话)-您不能在此处可靠地进行“超参数优化”,而必须根据经验和查看数据的人员来选择参数。