Algorithm 任意度量的最快k近邻?

Algorithm 任意度量的最快k近邻?,algorithm,math,discrete-mathematics,nearest-neighbor,Algorithm,Math,Discrete Mathematics,Nearest Neighbor,这个问题的关键是“任意度量”。如果你不知道那是什么,这只是测量点之间距离的方法。(在“真实”世界中,一维距离只是两点之间差值的绝对大小) 足够多的预LIM。我试图找到一种具有以下特性的快速k近邻算法: 适用于任意度量 有点容易实现 优化用于查找一组点到另一组点的距离 Wikipedia提供了一个算法和方法的列表,但没有任何关于实现的内容 更新:度量是余弦相似性,它不满足三角形的质量要求。然而,我似乎可以使用“角度相似性”(根据维基百科) 更新:用例是自然语言处理。“向量”是给定单词的“上下文

这个问题的关键是“任意度量”。如果你不知道那是什么,这只是测量点之间距离的方法。(在“真实”世界中,一维距离只是两点之间差值的绝对大小)

足够多的预LIM。我试图找到一种具有以下特性的快速k近邻算法:

  • 适用于任意度量
  • 有点容易实现
  • 优化用于查找一组点到另一组点的距离
Wikipedia提供了一个算法和方法的列表,但没有任何关于实现的内容

更新:度量是余弦相似性,它不满足三角形的质量要求。然而,我似乎可以使用“角度相似性”(根据维基百科)

更新:用例是自然语言处理。“向量”是给定单词的“上下文”,由二进制属性(例如:文档标题)表示。因此,虽然可能只有几个属性(现在我只使用3),但每个向量都有任意大的维度(在标题示例中,数据库中的每个标题都对应于向量中的维度)

更新:出于好奇,我正在实现这个算法:


更新:该算法需要从大约100个点中找到大约12个点的最近邻。平均尺寸可能非常大,比如说50,(我真的还不知道)。是的,我感兴趣的是算法,而不是库。是的,估计值可能已经足够好了。

我建议您使用位置敏感哈希(LSH),这是目前的趋势。它降低了高维数据的维数,但我不确定您的维数是否与该算法相匹配。更多信息请参见维基百科

您可以使用自己的度量,但通常可以在许多算法中使用。希望这有帮助


你可以选择RKD树,一个由RKD树组成的森林,但现在这可能太多了。

我认为这些结构中的许多都不容易用任意的度量编码。出于好奇,你的度量满足三角形不等式吗?这个度量的性质是什么?在一般情况下,没有更简单的答案。@templatetypedef使用不满足三角形不等式的度量来尝试k个最近邻是否可能/有意义?@igavriil Yep!对于任何点,都可以根据度量找到离它最近的k点。这些点不一定要彼此靠近,但它们仍然可以是离我们的主要点最近的k个点。我不知道任意的指标会有什么不同。但是是的,它看起来满足三角形ineq。查看更新这篇研究论文似乎不太实用(见图)…他们测量相似单词的方法不适用(因为dim与系统中的文档/链接总数成比例!)。我要看看“基于字符串”的相似性。但我会把这个标记为答案,因为从技术上讲,它是正确的。谢谢请问你指的是哪篇论文?:)不客气,好问题,顺便提一下,+1。问题中引用了“用于本体论半自动进化的智能系统”。我正在寻找相似性的替代度量(例如:最频繁的K距离),看来我无论如何都会使用LSH。多谢!谢谢你的好问题,这让我质疑自己,你当然应该得到+1!祝你的项目好运!仅供参考,LSH不适用于任意指标。有一个算法,但它隐藏在神秘的数学后面。看见另一种方法似乎是使用q-grams+minhashing+LSH