【问题标题】:Python Mahalanobis distance multidimensional z-scorePython Mahalanobis 距离多维 z 分数
【发布时间】:2021-06-25 12:10:21
【问题描述】:

我想要一个已知固定点周围二维数据的性能得分,例如 z 得分。我想我现在想要马氏距离,而不是每个方向的 z 分数。但是我没有两个向量,我有一个 2 x N 数组,其中包含 x-y 中的 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)

?谢谢

【问题讨论】:

  • 马氏距离,在点 p 和分布/点 D 之间。如果您有 2xN 位置数组,则不清楚要定义为点 p (或许多许多 p 给出许多距离)和分布 D(点集)。一种方法是将空间 S 定义为所有对 (i,j) 并且您想要定义每个点到 S 本身的距离。
  • 是的,所以我有一个固定点 p 说 (1,4),我想要 N 个 2D 点到点 p 的马氏距离。我只是不明白如何为此使用 scipy stats 功能?谢谢

标签: python scipy scipy.stats mahalanobis


【解决方案1】:

我将在维度 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)

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)也有效果

【讨论】:

  • 太好了,谢谢!我确实使用了法线的比例并增加了 N,但是距离并没有像我预期的那样变化,即使比例 = 100,我也不确定我是否理解那部分,距离是否总是大约[0,1] 像 z 分数? X = np.random.normal(size=(1000,2), loc=(1,4), scale=0.01) m = distance.mahalanobis( np.array([1,4]) , np.mean(X,axis=0), scipy.linalg.inv(np.cov(X.T)) ) print(m) X = np.random.normal(size=(1000,2), loc=(1,4), scale=1) m = distance.mahalanobis( np.array([1,4]) , np.mean(X,axis=0), scipy.linalg.inv(np.cov(X.T)) )
  • 要获得所有点的 Mahalanobis,最好使用上面的np.sum(distance.mahalanobis( np.array([1,4]) , (X,axis=0), scipy.linalg.inv(np.cov(X.T)) ),还是使用distance.mahalanobis( np.array([1,4]) , np.mean(X,axis=0), scipy.linalg.inv(np.cov(X.T)) )),我已经检查过它们会给出不同的结果(也包括 /100)。在与协方差矩阵的对数结合之前,这里的 [link] (stats.stackexchange.com/questions/351549/…) 看起来 sum 是正确的?
猜你喜欢
  • 2013-04-22
  • 2014-07-09
  • 2020-05-06
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多