python - 具有不确定点的最近邻

标签 python scikit-learn nearest-neighbor mahalanobis

我有两个二维点集 AB。我想为 B 中的每个点找到 A 中的第一个最近邻居。 但是,我正在处理不确定的点(即点具有均值(2D 向量)和 2*2 协方差矩阵)。

因此,我想使用马氏距离,但在 scikit-learn(例如)中,我无法为每个点传递一个协方差矩阵,因为它需要一个协方差矩阵。

目前,仅考虑平均位置(即我的 2D 正态分布的平均值),我有:

nearest_neighbors = NearestNeighbors(n_neighbors=1, metric='l2').fit(A)
distance, indices = nearest_neighbors.kneighbors(B)

对于我不确定的点,与其使用 L2 范数作为距离,我宁愿计算(在 A 中的点 a 和点 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) 是二维均值和 2 *2 不确定点a (resp. b)的协方差矩阵。

最佳答案

我最终使用了自定义距离:

def my_mahalanobis_distance(x, y):
    '''
    x: array of shape (4,) x[0]: mu_x_1, x[1]: mu_x_2, 
                            x[2]: cov_x_11, x[3]: cov_x_22
    y: array of shape (4,) y[0]: mu_ y_1, y[1]: mu_y_2,
                            y[2]: cov_y_11, y[3]: cov_y_22 
    '''     



    return sp.spatial.distance.mahalanobis(x[:2], y[:2], 
                                           np.linalg.inv(np.diag(x[2:]) 
                                           + np.diag(y[2:])))

因此一个点有4个特征:

  • xy 坐标
  • xy 方差(协方差矩阵在我的例子中是对角线)

关于python - 具有不确定点的最近邻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488381/

相关文章:

python - 我可以使用动态映射来解压缩 Python 中的关键字参数吗?

python - 如何使用 math.atan2 函数检测一个对象是否在另一个对象的 "line of sight"中?

python - 在sklearn的make_circles方法中增加半径

python - 用句子增量训练 Sklearn 的 SGD 分类器

python 在列表列表中查找给定节点的所有邻居

Python Scipy ndimage.gaussian_filter 抛出运行时错误

python - python 中的 any() all() 函数

python - Sklearn kNN 使用用户定义的指标(再次)

python - Python 中的条件最近邻

java - 寻找二维数组的邻居