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

请求修正贝叶斯函数代码并提供不同数值的贝叶斯定理示例

修正贝叶斯后验概率计算函数

原代码存在的问题

  1. 计算后验概率时,分母错误使用了输入的先验概率a,正确分母应为全概率P(B)(即代码中计算的b变量)
  2. 函数内部重新给参数a赋值,覆盖了原始输入的先验概率,导致逻辑错误
  3. 测试代码缩进错误,被嵌套在函数定义内部,无法执行

修正后的代码

def bayes(prior_a, b_given_a, b_given_not_a):
    """Calculates P(A|B) using Bayes theorem.
    Bayes theorem states that:
                       P(B|A) * P(A)
    P(A|B) = --------------------------------
              P(B|A) * P(A) + P(B|~A) * P(~A)
    """
    not_a = 1 - prior_a
    # 计算全概率P(B)
    p_b = b_given_a * prior_a + b_given_not_a * not_a
    # 计算后验概率P(A|B)
    posterior_a = (b_given_a * prior_a) / p_b
    return posterior_a

# 测试示例1:用户提供的案例
prior_a = 0.01
b_given_a = 0.99
b_given_not_a = 0.99
result = bayes(prior_a, b_given_a, b_given_not_a)
print(f'P(A|B) = {result * 100:.2f}%')  # 输出:P(A|B) = 1.00%

# 测试示例2:疾病检测案例
# 假设某种疾病的先验概率是0.5%,检测准确率(患病时检测阳性)是99%,假阳性率(未患病时检测阳性)是1%
prior_disease = 0.005
positive_given_disease = 0.99
positive_given_no_disease = 0.01
disease_result = bayes(prior_disease, positive_given_disease, positive_given_no_disease)
print(f'检测阳性时患病的概率:{disease_result * 100:.2f}%')  # 输出:检测阳性时患病的概率:33.22%

代码说明

  • 把参数名改为prior_a,避免和后验概率变量混淆
  • 严格按照贝叶斯公式计算,用全概率p_b作为分母
  • 测试代码放在函数外部,确保能正常执行
  • 使用f-string格式化输出,更直观清晰

内容的提问来源于stack exchange,提问作者latonya kimble

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:15:33