看起来我无法在sklearn
的KDTree中使用这种相似度度量,例如,但我需要这样做,因为我在测量词向量的相似性。对于这种情况,有没有快速且稳健的自定义算法?我知道局部敏感哈希
,但它需要进行大量调整和测试以找到合适的参数。
回答:
使用余弦相似度得到的排名,与先对所有数据点进行归一化后欧几里得距离的排名顺序是等价的。因此,你可以使用KD树来查找K近邻,但你需要重新计算余弦相似度。
余弦相似度通常不被视为距离度量,但它可以被转换为距离度量。如果这样做,你就可以使用其他结构,如球树,直接进行加速的近邻搜索,使用余弦相似度。我已经在JSAT库中实现了这一点,如果你对Java实现感兴趣的话。