我有一组值D:
[[ 6.83822474 3.54843586]
[ 12.45778114 4.42755159]
[ 10.27710359 9.47337879]
...,
[ 46.55259568 64.73755611]
[ 51.50842754 44.60132979]
给定具有均值M和协方差V的多元高斯分布:
答案 0 :(得分:3)
为多变量情况定义距离的正确方法是Mahalanobis distance,即
这样做的一个例子是:
import numpy as np
vals = np.array([[ 6.83822474, 3.54843586],
[ 12.45778114, 4.42755159],
[ 10.27710359, 9.47337879],
[ 46.55259568, 64.73755611],
[ 51.50842754, 44.60132979]])
# Compute covariance matrix and its inverse
cov = np.cov(vals.T)
cov_inverse = np.linalg.inv(cov)
# Mean center the values
mean = np.mean(vals, axis=0)
centered_vals = vals - mean
# Compute Mahalanobis distance
dist = np.sqrt(np.sum(centered_vals * cov_inverse.dot(centered_vals.T).T, axis=1))
# Find points that are "far away" from the mean
indices = dist > 2
答案 1 :(得分:3)
听起来你想要的概括就是Mahalanobis distance。与平均值相差1的马哈拉诺比斯距离是单变量高斯平均值的一个标准偏差的推广。
您可以使用模块scipy.spatial.distance
中的函数计算马哈拉诺比斯距离。 (几乎可以肯定,这种距离的代码在scikit-learn中有某种形式,可能还有statsmodels,但我还没有检查过。)
对于计算单个距离,有scipy.spatial.distance.mahalanobis
,并且为了计算点集合之间或之间的距离,您可以分别使用pdist
和cdist
(也来自{{1} }})。
这是一个使用scipy.spatial.distance
的脚本。在图中,以红色圈出的点与马哈拉诺比斯距离平均值的距离为2。
cdist