首页 > 解决方案 > 如何从 Python 中的多变量分布中边缘化变量?

问题描述

我在理解从概率分布中边缘化变量的正确方法时遇到了一些麻烦。据我了解,正确的方法是对被边缘化的变量求和,只留下要保留的变量。对于正态分布的情况,结果也是正态分布。我可以用方程式和积分来展示这部分,但是当我尝试在 python 中检查时,我得到了不正确的结果——结果分布的峰值要高得多。

这是示例(代码来自Marginalize a surface plot 并在其上使用核密度估计(kde)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import multivariate_normal, gaussian_kde

# Choose mean vector and variance-covariance matrix
mu = np.array([0, 0])
sigma = np.array([[2, 0], [0, 3]])
# Create surface plot data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
rv = multivariate_normal(mean=mu, cov=sigma)
Z = np.array([rv.pdf(pair) for pair in zip(X.ravel(), Y.ravel())])
Z = Z.reshape(X.shape)
# Plot it
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
pos = ax.plot_surface(X, Y, Z)
plt.show()

这使得绘制两个变量正态分布图。如果我取变量 x 的总和来获得边际分布

Zmarg_y = Z.sum(axis=0)
plt.plot(x, Zmarg_y)
plt.show()

结果与我只是删除变量而不是边缘化不同。我也尝试了 3 变量高斯分布,我将 1 变量边缘化以获得 2 变量分布。结果也达到了更高的规模。这里的标准化有问题吗?我第一次研究概率,并试图理解每一个细节,我认为我误解了一些重要的事情。谢谢你。

标签: pythonprobability-theoryprobability-distribution

解决方案


推荐阅读