整合区域以发现概率

时间:2018-10-09 11:18:20

标签: python integration

我有一个联合的PDF p(x,y),其中0<x<1, 0<y<1。我想找到降落在参数空间中某些区域的概率。参数空间如下图所示:

enter image description here

该部门受列表flist的约束。将flist[i][j] = 1涂成黄色,flist[i][j]=-1涂成紫色和flist[i][j]=0涂成青绿色的点。空分是离散的,即不存在返回g(x,y)的函数1,-1,0,而是列表flist是用有限分辨率计算的,而与问题无关。 >

列表flist 不是由概率分布生成的。这是独立的,仅用于获取参数空间的分隔。

现在,考虑到PDF p(x,y),我想找到降落在黄色区域上的可能性。我需要对黄色区域进行积分才能找到该值。问题是,我没有将黄色区域与其余区域分开的曲线公式。我不敢使用重型机器学习工具,因为我不熟悉它们。

是否有使用列表flist在黄色区域上进行积分的更简单方法?

1 个答案:

答案 0 :(得分:1)

您可以使用flist中每种颜色/数字的出现作为指示。我认为flist是一个二维列表。

import numpy as np

farray = np.array(flist)
prob_yellow = (farray==1).sum()/ (farray.shape[0] * farray.shape[1])
prob_purple = (farray==-1).sum()/ (farray.shape[0] * farray.shape[1])
prob_turqoise = (farray==0).sum()/ (farray.shape[0] * farray.shape[1])

如果您有将彩色平面分开的线的x和y数组,则另一种方法是对数字进行积分。例如:

from scipy import integrate
import numpy as np

x = np.arange(0,1,0.1)
y_purple = np.exp(-x)
prob_purple = integrate.simps(y_purple,x)

编辑:据我了解,flist分布不均。在这种情况下,我首先将其转换为均匀分布的列表,然后使用上述第一种方法。

我创建了点并列出:

points = np.array([[0,0],[0.4, 0.5],[0.5, 0.6],[1, 1]])
flist = np.random.randint(-1,2, size=len(points))

然后进行插值:

import scipy.interpolate as intp
fintp = intp.NearestNDInterpolator(points, flist)

x = np.linspace(0,1,6)
y = np.linspace(0,1,6)
xx, yy = np.meshgrid(x, y)
positions = np.column_stack((xx.ravel(),yy.ravel()))

f_evenly = fintp(positions).reshape(len(x), len(y))

并计算概率:

prob_yellow = (f_evenly==1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_turqoise = (f_evenly==0).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_purple = (f_evenly==-1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])

检查结果:

plt.imshow(f_evenly, extent=[0,1,0,1])
plt.show()
print('probabilities: \nyellow: %.2f\nturqoise: %.2f\npurple: %.2f'%(prob_yellow,  prob_turqoise, prob_purple))

Result

probabilities: 
yellow: 0.47
turqoise: 0.36
purple: 0.17