选择数据集中属于多元高斯分布的点

时间:2017-07-09 15:27:57

标签: python numpy scipy gaussian multivariate-testing

我有一组值D:

 [[  6.83822474   3.54843586]
 [ 12.45778114   4.42755159]
 [ 10.27710359   9.47337879]
 ..., 
 [ 46.55259568  64.73755611]
 [ 51.50842754  44.60132979]   

给定具有均值M和协方差V的多元高斯分布:

  1. 单变量点在平均值的2个标准偏差范围内的等效多变量情况是多少?即,假设我具有平均值A和标准B的单变量分布,我可以说如果x_i -A <1,则x_i在平均值的2个标准偏差内。 B.在多变量情况下,这相当于什么?
  2. 如何从平均M计算D中所有在2 std(或多变量情况下的等价物)内的点?

2 个答案:

答案 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,并且为了计算点集合之间或之间的距离,您可以分别使用pdistcdist(也来自{{1} }})。

这是一个使用scipy.spatial.distance的脚本。在图中,以红色圈出的点与马哈拉诺比斯距离平均值的距离为2。

cdist

plot