Python 从pdf生成概率?
我有一些数据是正态分布的,我已经安装了pdf。然而,我想从数据集中得到给定值发生的可能性。据我所知,这是pdf下的垃圾箱区域,x的值位于该区域。是否有一个numpy或scipy.stats函数来生成这个?我已经看过了,但不是我没有看到,就是我的理解力不足让我退缩了。到目前为止,我已经:Python 从pdf生成概率?,python,numpy,scipy,probability-density,Python,Numpy,Scipy,Probability Density,我有一些数据是正态分布的,我已经安装了pdf。然而,我想从数据集中得到给定值发生的可能性。据我所知,这是pdf下的垃圾箱区域,x的值位于该区域。是否有一个numpy或scipy.stats函数来生成这个?我已经看过了,但不是我没有看到,就是我的理解力不足让我退缩了。到目前为止,我已经: import h5py import numpy as np from matplotlib import pyplot as plt import matplotlib.mlab as mlab import
import h5py
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.mlab as mlab
import scipy.stats as stats
import numpy
import math
a = 'data.h5'
f = h5py.File(a,'r')
dset = f['/DATA/DATA/']
values = dset[...,0]
然后,我可以生成此数据的柱状图,并将pdf与之匹配:
n, bins, patches = plt.hist(values, 50, normed=1)
mu = np.mean(values)
sigma = np.std(values)
plt.plot(bins, mlab.normpdf(bins, mu, sigma))
plt.show()
我可以得到给定值x的f(x)(在这个例子中是0.65)
有人能帮我从中得出概率吗
我已经附上了pdf输出的直方图
理想情况下,你需要做的是在你想要概率的事件范围内,对概率密度函数进行积分。下面是一些代码:
import numpy as np
import scipy.stats as ss
a = ss.norm.rvs(4, 2, 40)
hist(a, normed=True)
xs = np.linspace(0, 10, 30)
plot(xs, ss.norm.pdf(xs, 4, 2), label='pdf')
plot(xs, ss.norm.cdf(xs, 4, 2), label='cdf')
这将产生一个正态分布,中心值为4,西格玛值为2。下图用红线表示pdf,用紫线表示cdf。cdf只是pdf从负无穷大到计算值的积分。因此,要获得某个范围内pdf的积分,只需减去该范围两个端点处的cdf值
现在你可以问看到-100到4之间的值的概率是多少
print ss.norm.cdf(4, 4, 2) - ss.norm.cdf(-100, 4, 2)
这将导致预期答案0.5
,相当于(几乎)整个分布的一半。因此,在您的情况下,您可能对看到0.60到0.70之间的值的概率感兴趣:
print ss.norm.cdf(0.70, 4, 2) - ss.norm.cdf(0.60, 4, 2)
这将导致以下可能性很小:
0.00490600527511
我应该注意到,0.65的“概率”本身是没有意义的,因为你有一个连续的概率分布,而0.65的精确值是它的无穷小的一部分,所以它的概率是0
0.00490600527511