是否可以使用具有余弦相似度的 KDTree?

Bra*_*ans 2 cluster-analysis machine-learning scikit-learn

例如,看起来我不能将此相似性度量用于sklearnKDTree,但我需要,因为我正在使用测量词向量相似性。对于这种情况,什么是快速稳健的定制算法?我知道Local Sensitivity Hashing,但它应该调整和测试很多才能找到参数。

Raf*_*ard 7

当您首先对所有数据点进行归一化时,您使用余弦相似度获得的排名等同于欧几里德距离的排名顺序。因此,您可以将 KD 树用于 KDTrees 的 k 个最近邻,但您需要重新计算余弦相似度。

余弦相似度不是通常呈现的距离度量,但它可以转换为一个。如果完成,您可以使用其他结构(如 Ball Trees)直接使用余弦相似度进行加速 nn。如果您对 Java 实现感兴趣,我已经在JSAT库中实现了它。