我使用mahout KMeansDriver
构建群集,并希望将Spearman
用作DistanceMeasure
。
我可以在java中找到这个算法,还是我需要自己编写?
我在网上找不到任何相关的例子。
答案 0 :(得分:1)
K-means 设计以最小化差异。距离函数也必须最小化方差,否则会失去收敛属性。为了保证与其他距离的收敛,请参阅围绕medoids(PAM)的分区,即k-medoids。
相关度量是不与k-means一起工作的距离的一个很好的例子:
考虑两个向量和绝对长矛相关:dist = 1- | r |
1 2 3 4 5
5 4 3 2 1
显然,spearman相关性为-1,这两个向量被认为是“相同的”。
然而,k-means现在将计算这两者的均值,从而产生常量向量
3 3 3 3 3
与这两个不相似(事实上,它与任何东西的相关性甚至都没有明确定义)。换句话说:均值不会使绝对相关性最小化,和 你不应该使用这个距离函数。
这就是为什么你应该只使用平方欧几里德距离的k-means。
在查看余弦相似度的定义时很容易看出, sphere k-means的原因也适用。