gpt4 book ai didi

Python:计算N个多元正态分布的值的可能性

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:37 24 4
gpt4 key购买 nike

所以我有一组 N 个多元正态分布,它们都具有相同的协方差。对于每个分布,我想计算获得值 x 的可能性。

对于单个分布和多个“x”值,这是微不足道的

from scipy.stats import multivariate_normal
import numpy as np

cov = [[1 ,0.1],[0.1 ,1]]
mean = [0,0]
Values = np.random.multivariate_normal([0,0],cov,samp)
print multivariate_normal.pdf(Values, mean, cov)

现在,如果我们反转这一点,并假设我们只有一个要检查的值,但每次都有多个均值但协方差相同。像下面这样(当然在实际情况下,每次迭代的均值是不同的)

means = [mean]*samples
Value = Values[0,:]

L = []
for iMean in means:
L.append(multivariate_normal.pdf(Value, iMean, cov))

print L

有更好的方法吗?如果有任何差异,则假设协方差矩阵不相关也是允许的,尽管通用解决方案更可取。

最佳答案

您可以首先计算所有分布的马哈拉诺比斯距离平方。 https://en.wikipedia.org/wiki/Mahalanobis_distance

然后计算概率密度。

* https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.multivariate_normal.html* https://en.wikipedia.org/wiki/Multivariate_normal_distribution

通过使用 numpy 数组,您可以避免缓慢的 Python 循环。我将其添加到您的示例中:

from scipy.stats import multivariate_normal
import numpy as np

cov = [[1 ,0.5],[0.5 ,1]]
mean = [2,2]

samples = 10
means = [mean]*samples

Value = (3,2.5)

L = []
for iMean in means:
L.append(multivariate_normal.pdf(Value, iMean, cov))



mean_array = np.array(means)
value_array = np.array(Value).astype(np.float)
cov_array = np.array(cov)
inv_cov_array = np.linalg.inv(cov_array)
dim = cov_array.shape[0]

diffs = value_array-mean_array
maha_distances = np.sum(diffs.transpose()*np.dot(inv_cov_array,diffs.transpose()),axis=0)
denominator = 1/np.sqrt((2*np.pi)**dim*np.linalg.det(cov_array))

l = denominator * np.exp(-0.5*maha_distances)

res_dif = np.array(L) - l
print res_dif

关于Python:计算N个多元正态分布的值的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com