我有一个联合的PDF p(x,y)
,其中0<x<1, 0<y<1
。我想找到降落在参数空间中某些区域的概率。参数空间如下图所示:
该部门受列表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
在黄色区域上进行积分的更简单方法?
答案 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))
probabilities:
yellow: 0.47
turqoise: 0.36
purple: 0.17