如何在 Scipy 中计算多元高斯的概率?

Dr *_*tan 2 python scipy

如何x在 Scipy 中计算多元高斯在某一点的概率?

我试过

    probability = multivariate_normal(x, mean, v)
Run Code Online (Sandbox Code Playgroud)

其中xmeanv都是大小正确的向量,但我得到:

    probability = multivariate_normal(x, mean, v )
TypeError: __call__() takes at most 3 arguments (4 given)
Run Code Online (Sandbox Code Playgroud)

Ric*_*ren 7

首先是错误。当您调用时,multivariate_normal您实际上是在调用 __call__该类multivariate_normal_gen源代码位于第 555 行)。因为它是一个方法,所以将自身作为self参数,并且始终是第一个参数。当您再添加三个参数时,参数总数为四个。

pdf关于您的问题,您通过调用来评估给定点的概率密度函数multivariate_normal。例子:

from scipy.stats import multivariate_normal
import numpy as np
x = np.array([[1,2], [3,4]])
multivariate_normal.pdf(x, mean=[0, 1], cov=[5, 2])
Run Code Online (Sandbox Code Playgroud)

打印出:

Out[44]: array([ 0.0354664 ,  0.00215671])
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。pdf 需要在多维范围内积分才能得到概率。这只是可能性。 (5认同)
  • 但概率应该是单个值(0-1),无论高斯变量的数量/维数有多少 (4认同)
  • 如果你执行 `probs = multivariate_normal.pdf([[1,2], [3,4]], Mean=[0, 1], cov=[5, 2])`,那么 `probs[0]` = P(x,y = 1,2) 且 `probs[1]` = P(x,y=3,4)。输出是输入数组每个元素的概率序列,每个元素都是区间 [0,1] 中的单个值。 (2认同)