是否可以使用具有余弦相似性的kdtree



例如,我无法使用sklearn kdtree的这种相似性度量,但是我需要,因为我使用测量词向量相似性。对于这种情况,什么是快速鲁棒的自定义算法?我知道Local Sensitivity Hashing,但应该调整&测试了很多以找到参数。

当您首先将所有数据点标准化时,您将使用余弦相似性获得的排名等于欧几里得距离的等级顺序。因此,您可以使用KDTrees的K最近的K邻居使用KD树,但是您需要重新计算余弦的相似性。

余弦相似性不是正常呈现的距离度量,而是可以转化为一个。如果这样做,则可以使用其他结构(例如球树)直接使用余弦相似性加速NN。如果您对Java实施感兴趣,我已经在JSAT库中实现了此功能。

根据此页面末尾的表,余弦支持eoth k-d-tree应该是可能的:elki用R-Tree支持余弦,您可以为k-d得出界限的矩形-tre,也是;K-D-Tree在该表中至少支持五个指标。所以我不明白为什么它不应该工作。不幸的是,Sklearn中的索引支持通常不是很完整(尽管有所改善)。因此,不要将其作为参考。

虽然K-d-Tree理论上可以通过

来支持余弦
  • 转换数据以使余弦成为欧几里得距离
  • 使用边界框和与边界框的最小角度(这似乎是Elki为R-Tree所做的)

您应该知道,K-D-Tree与高维数据不能很好地工作,并且余弦在非常高的数据中很受欢迎。K-D-Tree总是只看一看一个维度。如果您希望使用一次所有D维度,则需要O(2^d)数据点。对于高d,无法使用所有属性。R-Tree在这里稍好一些,因为它使用了边界框。这些在各个维度的每一个分裂中都缩小,因此修剪的确会变得更好。但这也意味着它需要大量的记忆来对此类数据,并且树木的结构可能会遇到相同的问题。因此,从本质上讲,不要将其用于高维数据。

,但也不认为余弦会神奇地改善您的结果,尤其是对于高清数据。它被高估了。如上所述所示,不能成为余弦比欧几里得的系统益处:余弦是欧几里得的一种特殊情况。

对于稀疏数据,倒置列表(C.F. Lucene,Xapian,Solr,...)是索引索引的方法。

相关内容

  • 没有找到相关文章

最新更新