为了账号安全,请及时绑定邮箱和手机立即绑定

博客语言结果的一小部分

博客语言结果的一小部分

一只萌萌小番薯 2022-08-17 16:54:49
我正在使用以下示例试用贝叶斯逻辑语言。1%的女性患有乳腺癌(因此99%没有)。80%的乳房X光检查在乳腺癌存在时检测到乳腺癌(因此20%的人错过了它)。9.6%的乳房X光检查在乳腺癌不存在时检测到乳腺癌(因此90.4%正确返回阴性结果)。我创建了以下代码:random Boolean Has_Cancer ~ BooleanDistrib(0.01);random Boolean Detect_Cancer ~     if Has_Cancer then BooleanDistrib(0.8)    else BooleanDistrib(0.096);obs Detect_Cancer = true;query Has_Cancer;当我运行它时,我得到以下结果:======== Query Results =========Number of samples: 10000Distribution of values for Has_Cancer    false   0.9245347606896278    true    0.07546523931038764======== Done ========根据博客应该是.true0.0776当我使用100个样本运行时,我得到这个:======== Query Results =========Number of samples: 100Distribution of values for Has_Cancer    false   0.9223602484472041    true    0.077639751552795======== Done ========我只是想理解为什么。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

BLOG 生成的值是使用似然加权算法 (LWA) 从条件概率图形模型生成随机样本后的点估计值。与示例帖子中的分析值的差异可能是由于随机抽样过程的噪声造成的。


但令人困惑的是,BLOG默认使用相同的固定种子初始化随机数生成器,因此结果误导性地看起来像是确定性的。如果将标志添加到运行调用中,您将看到使用其他随机种子的结果。--randomize


我不知道LWA的理论性质(例如,它绑定后验意味着有多紧密),但至少对于一个朴素的生成抽样方案,你生成的手段完全在95%的CI范围内。下面是一个 Python 示例,模拟 1000 次运行 10K 示例。


import numpy as np

from scipy.stats import binom


np.random.seed(2019)


N, K = 10000, 1000

tp = np.empty(K)


for i in range(K):

    t = binom(n=N, p=0.01).rvs()

    f = N - t

    detect_t = binom(n=t, p=0.800).rvs()

    detect_f = binom(n=f, p=0.096).rvs()

    tp[i] = detect_t / (detect_f + detect_t)


np.quantile(tp, [0.025, 0.5, 0.975])

# array([0.06177242, 0.07714902, 0.09462359])


查看完整回答
反对 回复 2022-08-17
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号