3.3 贝叶斯网络推理计算应用实例
本节介绍一个来自https://www.norsys.com/tutorials/netica/nt_toc_A.htm的应用例子,在这个网站中介绍了一个叫作“Asia”的简单贝叶斯网络,它是一个很流行的例子,从该例子中可以看到贝叶斯网络的应用。
首先,建立如图3.5所示的贝叶斯网络图。
图3.5 Asia(亚洲)贝叶斯网络结构图
图3.5中的每个节点对应于患者的个人情况,例如,“访问亚洲”表示患者最近是否访问过亚洲。两个节点之间的箭头(也称为链接),表示这两个节点的状态之间存在确定的概率关系。例如,吸烟会增加患肺癌和支气管炎的机会,肺癌和支气管炎都会增加呼吸困难(呼吸短促)的概率。肺癌和肺结核,都能引起肺X射线检查结果异常。
箭头的链接方向可对应于“因果关系”。从图3.5中可以看出,图中上方的节点对下面的节点影响更大。在贝叶斯网络中,链接可能会形成闭环,但不能形成循环关系。例如,在图3.6a中,有许多闭环,不能说网络是错误的;而在图3.6b中,从D到B的链接的添加创建了一个循环,这是不允许的。网络不能构成循环的关键优势在于,这样的网络可以快速地更新算法,因为概率计算无法无限期地“循环”。
图3.6 贝叶斯网络示意图
a)合法的贝叶斯网b)非贝叶斯网(存在环)
在使用该贝叶斯网络诊断患者时,可以在某些已知节点中设定输入概率值,用这些设定的输入概率值来计算其他节点的概率。如果对患者进行胸部X射线检查并且发现其检查结果有异常,那么该患者患有结核病或肺癌的机会就会上升;如果医生进一步了解到患者访问了亚洲某些国家,那么患者患肺结核的可能性会进一步上升,而肺癌的患病率会下降(因为X射线表征可以有效区分结核病与肺癌的症状)。
建立的模型要能够准确描述现实世界的建模对象,依据模型可以对现实世界中建模对象的发展趋势进行预测。更进一步,可以运用建立的数学模型进行实验的验证,而不必针对真实的实物(人)进行预测结果的验证。当我们想要针对现实世界来建立概率模型,并用来预测未来发生的事情时,通常会尝试使用概率的“联合分布”方法。如果用表格来“装载”这类模型中所有可能的状态组合的所有概率,这样的表会变得很大,因为需要为每个状态组合存储一个概率值,然后使用乘法来完成联合概率分布的计算。在亚洲模型中,有2×2×2×2×2×2×2×2=28=256个概率。对于一些复杂的模型,联合分布概率的数量最终可能达到数百万、数千万,甚至达到令人难以置信的数目,这种计算负担是难以承受的。
贝叶斯网络仅涉及节点间的概率传递计算,甚至不用配置存储状态,可以节省计算量。随着计算能力的提升,贝叶斯网络的改进算法也层出不穷,已经成为现代计算机科学研究的一个热门领域。贝叶斯网络至今成为热点的另一个原因,是该方法具有很强的适应性。研究者可以从某些领域中知识有限的小型项目开始,并在获取新知识时对其进行扩展。
例如,本节介绍的“Asia(亚洲)贝叶斯网络”。假设一个新毕业的肺病专科医生,可以根据肺癌、肺结核和支气管炎的发病率及其原因和症状,建立起基本的贝叶斯网络来进行病例诊断的决策系统。假定已有的知识如下所示。
(1)大约有30%的美国人口吸烟。
(2)肺癌患者比例:每10万人口中大约有70人患肺癌。
(3)结核病发生比例:每10万人口中大约有10人患肺结核。
(4)支气管炎发生比例:每10万人口中大约有800人患支气管炎。
(5)其他类似哮喘等发生比例:每100人中大约10人左右患呼吸困难症状。
根据这些信息,设计贝叶斯网络如图3.7所示。
图3.7 依据已有统计数据改进后的贝叶斯网络结构
由于在美国大多数患者是由他们的家庭医生推荐去大医院就诊的,因此在综合性医院工作的医生获得的这些数据并不一定能完全符合实际情况。此外,实际肺部疾病的发生率要比已有的统计数据高得多,所以在实践中,一般诊所的医生不应该使用上面的贝叶斯网络,还需要具体问题具体分析。假设一般诊所的医生处理了数百个病人的病例,他通过自己的诊所获得的数据如下。
(1)50% 的患者吸烟。
(2)1%的人患有结核病。
(3)5.5% 患有肺癌。
(4)45% 的患者患有轻度或慢性支气管炎。
把这些新的数据输入到贝叶斯网络,此时的贝叶斯网络能够更加真实地描述医生所处理的病人类型,如图3.8所示。
当医生获得每个特定患者的知识时,网络中的概率将依据患者的“特定情况”自动调整,这就是贝叶斯推理在实际应用中的巨大魅力和价值。贝叶斯网络方法的强大之处在于,在知识积累的每个阶段产生的概率,在数学上和科学方法上都是合理的。换句话说,充分考虑到对患者的了解,然后根据数学和统计知识,运用贝叶斯网络可自动给出一个合理的结论。
图3.8 依据自己诊所统计数据进一步改进的贝叶斯网络
还可以通过添加关于特定患者的知识来调整概率。假设一个新的女病人走进诊室,她告诉医生自己经常呼吸困难。把这个症状输入贝叶斯网络,然后计算其他的概率,可以发现三种疾病的概率都增加了。因为所有这些疾病都以呼吸困难作为症状,而且患者也确实表现出了这种症状,所以可以加强对这些疾病可能存在的置信度。最显著的跳跃变化是支气管炎,从45%上升到83.4%。支气管炎比癌症或结核病更常见,一旦有严重肺部疾病的证据,支气管炎就会成为医生最大可能的候选诊断。
病人吸烟的概率也在大幅度增加,从50%增加到63.4%。患者最近访问亚洲的机会略有增加:从1%上升到1.03%,这是微不足道的。从患者身上获得异常X射线检查结果的概率也略有上升,从11%上升到16%。
目前,仍然不能确诊病人到底得的是什么病,只获得了最佳假设是她患有支气管炎(目前的概率为83.4%),还应该增加正确诊断的概率,以免误诊,尤其是避免将癌症误诊为支气管炎。为此,医生还需要更多的信息。医生进一步询问这名患者最近是否去过亚洲,患者回答“是的,去过亚洲”。在得到这一信息后输入到贝叶斯网络,这一知识对贝叶斯网络产生非常大的影响,如图3.9所示。
图3.9 修正后的贝叶斯网络
突然间,肺结核的发病率大幅上升,从2%上升到9%。有趣的是,注意到肺癌、支气管炎或病人吸烟的机会都有所下降。这是因为现在肺结核比以前更能解释呼吸困难(尽管支气管炎仍然是最好的候选诊断)。因为现在癌症和支气管炎的可能性更小,吸烟也是。这种现象在贝叶斯网络研究领域被称为“解释掉”。它的意思是说,当某事件有相互竞争的可能原因存在时,其中第一个原因的机会增加时,其他原因的机会必然减少,因为其他原因被第一个原因“解释掉”了。
为了继续诊断,我们还会问更多的问题,经过询问发现这位病人确实是一个吸烟者,更新后的网络如图3.10所示。
图3.10 进一步修正后的贝叶斯网络图
值得注意的是,目前的最佳假设仍然是患者患有支气管炎,而不是结核病或肺癌。但可以肯定的是,医生会要求进行X光诊断。假设X射线检查结果正常,再计算贝叶斯网络值的结果如图3.11所示。
图3.11 X射线检查结果正常时的贝叶斯网络图
但是如果X射线检查结果是不正常的,计算贝叶斯网络后的结果如图3.12所示。
图3.12 X射线检查结果异常时的贝叶斯网络图
从图3.12可以看出,结核病或肺癌的发病率已大幅上升。支气管炎仍然是三种不同疾病中最有可能出现的一种,但它低于肺结核或肺癌的联合假设。所以,医生会建议病人做进一步的检查,进行血液检查、肺组织活检等。因为当前所建立的贝叶斯网络不包括这些测试,在获取这些诊断过程的新统计数据时,只需添加额外的节点就可以很容易地扩展原有的贝叶斯网络,不需要扔掉前一网络的任何模块。由此可见,贝叶斯网络很容易扩展(或减少、简化),这一强大功能可使其适应用户不断变化的需求和不断变化的知识。