使用python的条件和联合问题

问题描述

我有一个联合概率 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)