对于机器学习应用程序,我的团队需要针对每个(对于在5到100之间的计算到集合第个最近邻居的欧几里得距离。和几百到几百万)。当前,我们正在使用蛮力方法,或者在上带有kd树的显而易见的方法,当为高且相对较低永远不会赢。(一切都在内存中。)
不过,似乎必须有一种比蛮力更好的方法-至少一种利用三角形不等式的优势,或者利用局部敏感的哈希值。一个合理的近似值也可能是可以的。
我能够找到的研究似乎集中在寻找单个最近邻居(或近似于最近的邻居)的问题上。我正在寻找的问题是否用其他名字命名,或者与我没有想到的相关问题有联系?
2
kd树确实利用了三角形不等式。您是否尝试过使用其他空间数据分区树?您可能要研究的另一件事(我对机器学习算法一无所知)这些特定点是否倾向于具有结构,这可以帮助您快速找到超平面并在类似kd的树中使用这些超平面,而不是通常的平均每位数坐标拆分,在高维度上效果不佳。
—
罗斯·斯尼德
@RossSnider感谢您的建议。可以肯定的是,KD树使用了三角形不等式,但是我想到的是比蛮力要快的东西。:)您还会建议其他哪些类型的空间数据分区树?在Wikipedia的列表中,也许只有vp树似乎适用,而且看来欧几里得距离似乎不比kd树更好。我会考虑是否存在一种更好的针对特定问题的方法来定义分离的超平面,但是没有想到。
—
Dougal
我想我希望我们知道我们正在对所有(以及其他点)进行评估,这一事实将为算法提供某种帮助。不过,我不确定情况是否如此。
—
Dougal
什么是 通常在您的应用程序中?
—
Suresh Venkat
@SureshVenkat我们通常使用 大约3,有时更大一些。
—
Dougal