我正在寻找以下问题的有效解决方案:对于n维欧几里德空间中的给定点集,找到此集合中的此成员,以最小化到集合中其他点的总距离。
显而易见的天真方法是二次方的,所以我正在寻找一些小于二次方的东西。
我的第一个想法是,我只需要找到边界球体的中心,然后找到设置到这一点的最近点。但事实并非如此,想象一下直角三角形 - 它的所有顶点都与这个中心等距,但是,恰好一个顶点符合我们的要求。
很高兴人们会对这个问题有所了解。
答案 0 :(得分:2)
最小化到所有点的距离是它们的平均值。只是一个猜测,但在你找到平均值后,你可以找到最接近它的点。正如在评论中正确指出的那样,中位数而不是平均值实际上会最小化距离(平均值将最小化平方距离)。中位数也可以O(n)
计算。对于高维数据集,此解决方案当然是O(n*m)
,其中m
是维度数。
还有一些链接:
请参阅此处接受的答案:Algorithm to find point of minimum total distance from locations
由mcdowella提供的链接:http://en.wikipedia.org/wiki/Geometric_median
答案 1 :(得分:2)
我正在进行这项工作,但在凸优化中,“最佳点集”和“最佳点”之间似乎存在密切联系。
您的分数函数是距离的总和。每个距离都是凸U形(在这种情况下为V形),因此它们的总和是凸U形。特别是除了在集合中的点之外,它在任何地方都有一个非常好的导数,并且这个导数是乐观的 - 如果你在一个点及其导数上取值,忽略你正在观察的点上的任何点,那么基于此的预测将是乐观的 - 使用衍生物形成的线几乎完全在正确的答案之下但是在一个点上擦过它。
这导致以下算法:
反复
随机选择一个点,看看到目前为止是否是最佳点。如果是这样,请注意它。取此时距离总和的导数。使用此值,以及此时的值,计算出每个其他点的预测距离总和,并尽可能地丢弃此预测比最佳答案更差的点(尽管您仍需要将它们考虑在内)在计算距离和衍生物时)。这些将是通过与导数垂直的选定点绘制的平面远侧的点。
现在也将选定的点作为竞争者丢弃,如果还有任何要考虑的话,请重复。
我希望这对于随机选择的点是n log n。但是,如果这组点在n维中形成正多边形的顶点,那么它将花费N ^ 2,每次仅丢弃所选择的点 - N个点中的任何一个实际上都是正确的答案,并且它们都具有相同的相互距离的总和。
我当然会向任何能够确认或否定这一一般原则的人投票,以便在凸目标函数下找到一组给定点的最佳点。
好的 - 我对此感兴趣以便对此进行编程 - 所以如果有人关心的话,我会在这里转发200多行Java。在2维中它非常快,但在20维时你只获得两个左右的因子 - 这是合理可以理解的 - 每次迭代通过将问题预测到一条线并切断线外部分的一小部分来切断点。随机选择的点距离中心大约是其他点的一半 - 并且非常粗略地可以预期投影将截断除了1/2的第d个根的所有倍数,以便d增加分数你可以在每次迭代中丢弃的点减少。