如何使用Python与Numpy计算后验概率P(y | x)?
多类别后验概率
posterior()函数实现方案 你已持有每类的均值、标准差参数,可假设类条件概率服从一元高斯分布(该设定也是高斯朴素贝叶斯分类器的核心假设),以此计算缺失的p(x|y)值,完整实现逻辑如下:
类条件概率p(x|y)计算逻辑
高斯分布的概率密度函数公式为:
$p(x|y=i) = \frac{1}{\sqrt{2\pi} \cdot std[i]} \cdot e^{-\frac{(x - mean[i])^2}{2 \cdot std[i]^2}}$
其中:
mean[i]为第i类的均值std[i]为第i类的标准差
完整posterior()函数实现(Python示例)
import math def posterior(x, means, stds, priors, i): # 步骤1:计算所有类的分子项 p(x|y_k) * p(y_k) numerators = [] n_classes = len(priors) for k in range(n_classes): # 计算p(x|y=k) exponent = math.exp(-( (x - means[k])**2 ) / (2 * (stds[k]**2)) ) p_x_given_y = (1 / (math.sqrt(2 * math.pi) * stds[k])) * exponent # 计算分子项 numerators.append(p_x_given_y * priors[k]) # 步骤2:计算分母(所有分子项的和) denominator = sum(numerators) # 步骤3:返回第i类的后验概率 return numerators[i] / denominator
适用场景拓展与注意事项
- 若你的数据集为多特征场景,且假设特征之间条件独立,可分别计算每个特征的类条件概率后相乘,得到整体的
p(x|y) - 若担心连乘导致数值下溢,可将所有概率转换为对数形式计算,最终再还原为概率值,不影响后验概率的大小关系
内容的提问来源于stack exchange,提问作者Tudor Popica
相关产品推荐
相关产品推荐

