我在使用 sklearn 的 AffinityPropagation 进行聚类分析。
使用 clustering.labels_
得到的结果与对同一训练数据使用 clustering.predict
得到的结果不同(尽管几乎相同)。
为什么会这样,有什么见解吗?
回答:
除了 k-means 家族的聚类方法外,不要使用 predict
。
如果你执行 fit
,结果是通过亲和传播计算得出的。
如果你调用 predict
,实际上并不是在进行亲和传播。相反,它只是为每个点找到最近的样本点。这可能会,也可能不会,给出相同的结果,正如你所观察到的。由于最接近的点可能是主要原因,这种方法有很高的可能性是正确的 – 但它并不是在进行任何形式的亲和传播,而是对样本点进行最近邻分类。
k-means 是可以的,因为它使用的是最近中心逻辑。但这种逻辑并不普遍适用于聚类。一般来说,聚类算法无法对样本外的数据进行预测;你需要一个分类器来做到这一点。