问题描述
我想要一个关于已知固定点的二维数据的性能分数,比如 z 分数。我想我现在想要马哈拉诺比斯距离,而不是每个方向的 z 分数。但是我没有两个向量,我有一个 2 x N 数组,包含 x-y 中 N 个点的位置,还有一个固定的 2D 点,我想与它进行比较。我看了这个例子:
from scipy.spatial import distance
iv = [[1,0.5,0.5],[0.5,1,1]]
distance.mahalanobis([1,0],[0,iv)
用于在 Python 中计算,但我不知道我的 iv 应该是什么。我是否只是提出了我的已知观点,例如:
distance.mahalanobis([1,4],iv)
?谢谢
解决方法
我将在维度 2 的 X
中创建随机数据,这将定义分布,
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)
with
distance.mahalanobis( np.array([1,4]),scipy.linalg.inv(np.cov(X.T)) )
如果您的 N
太大,COV 矩阵可能太昂贵,计算成本太高,您可以采样。
将 N
的大小从 100 更改为 1000 确实不会产生太大影响,因为相同分布的样本只会变大。最好的感受不同参数的效果是绘制一些图片并尝试不同的点p
。另一种方法是围绕不同的平均值生成 X
,即 X = np.random.normal(size=(100,loc=(2,10) )
,如果您保留 p
(1,4)
也有效果