0

我想要一个已知固定点周围二维数据的性能得分,例如 z 得分。我想我现在想要马氏距离,而不是每个方向的 z 分数。但是我没有两个向量,我有一个 2 x N 数组,其中包含 xy 中 N 个点的位置,还有一个我想与之比较的固定 2D 点。我看了这个例子:

from scipy.spatial import distance
iv = [[1, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1]]
distance.mahalanobis([1, 0, 0], [0, 1, 0], iv)

用于在 Python 中计算,但我不知道我的 iv 应该是什么。我是否只是提出我的已知观点,例如:

distance.mahalanobis([1,4],iv)

? 谢谢

4

1 回答 1

1

我将创建X维度 2 的随机数据,这将定义分布,

import numpy as np
import scipy

from scipy.spatial import distance

X = np.random.normal(size=(100,2), loc=(1,4) )

现在您可以使用第一点的马氏距离

distance.mahalanobis( X[0] , np.mean(X,axis=0), scipy.linalg.inv(np.cov(X.T)) )

例如用你自己p = (1,4)

distance.mahalanobis( np.array([1,4]) , np.mean(X,axis=0), scipy.linalg.inv(np.cov(X.T)) )

如果您N太大,则 COV 矩阵可能太昂贵而无法计算,您可以进行采样。


将大小N从 100 更改为 1000 确实不会有太大影响,因为相同分布的样本只会变大。最好的感受不同参数的效果是绘制一些图片,尝试不同的点p。另一种方法是X围绕不同的平均值生成,即X = np.random.normal(size=(100,2), loc=(2,10) )如果你保持你p (1,4)的效果也是如此

于 2021-03-29T15:08:19.110 回答