使用 python 的条件和联合概率

conditional and joint prob using python

我有一个 table 的联合概率 P(x,y),我想创建一个函数来计算给定联合概率列表的条件概率。例如我有以下列表 XY=np.array([[.1,0,0],[.1,.3,.2],[.1,0,.2]]) XY.shape= (3,3 )

我想获得每个索引的条件概率,以便找到 x1cony1=XY[0,0]/y1=1 的条件概率 x2cony1=XY[0,1]/y1=.1

有没有办法编写一个函数来遍历矩阵并为我提供所有条件概率的 table?

谢谢

我不明白你的符号。我会尝试用我的符号来回答你的问题,希望你能推断出你的问题。 假设矩阵 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)