You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:06:01