【发布时间】:2015-04-26 21:21:16
【问题描述】:
这个问题的问题是“任意度量”。如果您不知道那是什么,那只是测量点之间距离的方法。 (在“真实”世界中,一维距离只是两点之间差异的绝对大小)。
足够的预赛。我正在尝试找到具有这些属性的快速 k 最近邻算法:
- 适用于任意指标
- 有点容易实现
- 针对查找一组点到另一组点的距离进行了优化
维基百科给出了算法和方法的列表,但没有关于实现的内容。
更新:度量是余弦相似度,它不满足三角形不等式。但是,我似乎可以使用“角度相似性”(根据维基百科)。
更新:用例是自然语言处理。 “向量”是给定单词的“上下文”,由二进制属性表示(例如:文档的标题)。所以虽然可能只有几个属性(现在我只使用 3 个),但每个向量都有任意大的维度(在标题示例中,数据库中的每个标题都对应于向量中的一个维度)。
更新:出于好奇,我正在实现这个算法:
http://josquin.cs.depaul.edu/~mramezani/papers/IEEEIS.pdf
更新:该算法需要从大约 100 个点中找到大约 12 个点的最近邻。平均尺寸可能会非常大,比如 50,(我真的不知道)。是的,我对算法感兴趣,而不是库。是的,估计可能已经足够了。
【问题讨论】:
-
我认为这些结构中的许多都不容易用任意度量编码。出于好奇,您的度量是否满足三角不等式?
-
这个指标的属性是什么?在一般情况下,没有更简单的答案。
-
@templatetypedef 用不满足三角不等式的度量来尝试 k 最近邻是否可能/有意义?
-
@igavriil 是的!对于任意一点,你可以根据度量找到离它最近的k个点。这些点不一定要彼此靠近,但它们仍然可以是离我们的主要点最近的 k 个点。
-
不知道任意指标会产生影响。但是,是的,它看起来满足三角形 ineq。查看更新
标签: algorithm math discrete-mathematics nearest-neighbor