我有两个 2D 点集A
和B
. 我想为 中A
的每个点找到第一个最近的邻居B
。但是,我正在处理不确定的点(即一个点有一个均值(2D 向量)和一个 2*2 协方差矩阵)。
因此,我想使用马氏距离,但在scikit-learn
(例如)中,我不能为每个点传递协方差矩阵,因为它需要一个协方差矩阵。
目前,仅考虑平均位置(即我的二维正态分布的平均值),我有:
nearest_neighbors = NearestNeighbors(n_neighbors=1, metric='l2').fit(A)
distance, indices = nearest_neighbors.kneighbors(B)
使用我的不确定点,而不是使用 L2 范数作为距离,我宁愿计算(在点a
inA
和b
B 中的点之间,它们的马氏距离:
d(a, b) = sqrt( transpose(mu_a-mu_b) * C * (mu_a-mu_b))
在哪里C = inv(cov_a + cov_b)
其中mu_a
(resp mu_b
) 和cov_a
(resp. cov_b
) 是不确定点a
(resp. b
) 的 2D 均值和 2*2 协方差矩阵。