问题描述
我有一个联合概率 P(x,y) 表,我想创建一个函数来计算给定联合概率列表的条件概率。例如我有以下列表 XY=np.array([[.1,0],[.1,.3,.2],.2]]) XY.shape=(3,3)
我想得到每个索引的条件概率,以便找到 x1cony1=XY[0,0]/y1=1 的条件概率 x2cony1=XY[0,1]/y1=.1
谢谢
解决方法
我不明白你的符号。我将尝试用我的符号回答你的问题,希望你能推断出你的问题。 假设矩阵 XY 包含连接概率,即
P(x=x_i,y=y_j) = XY[i,j].
现在,条件概率是
P(x=x_i | y=y_j) = P(x=x_i,y=y_j)/P(y=y_j) = XY[i,j]/(XY[0,j]+XY[1,j]+XY[2,j])
使用第一个轴上的 NumPy 总和可以轻松计算分母:
XY.sum(axis=0)
现在您应该将第一列(其中包含概率 P(x=x_i,y=y_0))除以总和的第一个值,即概率 P(y=y_0)。其他两列也类似。 这也可以直接完成,因为在 NumPy 中,(3,3) 矩阵与 (3) 向量的乘积是按列完成的,这正是我们想要的。 因此,这应该为您提供条件概率矩阵:
XY = np.array(...) # XY[i,j] is the probability of x=x_i,y=y_j.
# The probability of x_i conditioned to y_j is given by the [i,j] element of:
cond_prob = XY/XY.sum(axis=0)