我有k个点,我想找到一个最接近它们的点(不同的点)(新点和给定点之间的距离之和最小)
在飞机上八点
如何编写一个程序,它将在n维空间中给定k个给定点(例如10维空间中的16个点)给我这样的点
如何编写这样的求解器?
但是,尽管我会接受这样的解决方案,但我不想使用现成的功能
答案 0 :(得分:0)
与其他点的距离之和最小的点称为这些点的<空间>中位数,也称为geometric median。它可以通过 Weiszfeld算法导出,该算法在R程序包Gmedian
中实现。
让我们尝试您的示例:
library(Gmedian)
X <- rbind(
c(3, 4),
c(5, 3),
c(1, 8),
c(4, 6),
c(6, 6),
c(0, 1),
c(4, 6),
c(2, 1)
)
W <- Weiszfeld(X)
> W
$median
[,1] [,2]
[1,] 3.472091 4.607492
$iter
[1] 76
以下是获取距离总和的方法:
smedian <- c(W$median)
sum(
apply(X, 1, function(x){
sqrt(crossprod(x-smedian))
})
)
# 21.95253
如您所见,空间中位数不同于获得的中位数((4,4)
),并且距离的总和小于获得的中位数(22.84819
)。