numpy ValueError:概率之和不等于1

zxlwwiss  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(127)

不明白为什么我得到下面的值错误概率总和不为1.这是由于我的共同分配吗?numpy错误?任何帮助非常感谢。

import numpy as np
import matplotlib.pyplot as plt

p = np.array([[10/66, 15/66, 3/66], [20/66, 12/66, 0], [6/66, 0, 0]])

# Initialize starting values for X and Y
x = 0
y = 0

# Create arrays to store trace plots
trace_x = []
trace_y = []

# Run 10,000 iterations of Gibbs sampling
for i in range(10000):
    # Sample a new value for X given the current value of Y
    x = np.random.choice([0, 1, 2], p=p[y])
    # Sample a new value for Y given the current value of X
    y = np.random.choice([0, 1, 2], p=p[:, x])
    # Append the new values to the trace plots
    trace_x.append(x)
    trace_y.append(y)

# Plot the trace plots
plt.plot(trace_x)
plt.title('Trace plot for X')
plt.xlabel('Iteration')
plt.ylabel('Value')
plt.show()

plt.plot(trace_y)
plt.title('Trace plot for Y')
plt.xlabel('Iteration')
plt.ylabel('Value')
plt.show()
vlf7wbxs

vlf7wbxs1#

你提供的是P(X,Y=y)而不是P(X|这里缺少一个缩放项,因为P(X| Y=y)= P(X,Y=y)/ P(Y=y)。换句话说,联合分布的行和列不应该相加为一。你需要自己对它们进行归一化,以获得条件分布。

# Sample a new value for X given the current value of Y
py = np.sum(p[y])
x = np.random.choice([0, 1, 2], p=p[y] / py)
# Sample a new value for Y given the current value of X
px = np.sum(p[:, x])
y = np.random.choice([0, 1, 2], p=p[:, x] / px)

相关问题