怎么通俗易懂地解释贝叶斯网络和它的应用?

论坛 期权论坛 期权     
小杰   2018-10-3 20:34   24256   4
分享到 :
0 人收藏

4 个回复

正序浏览
5#
naiveman  3级会员 | 2018-10-3 20:34:36
4#
Sherry Zhang  4级常客 | 2018-10-3 20:34:35
之前采访过一名前海征信里的“数据科学家”,他和我解释了什么是贝叶斯网络,也分享了贝叶斯网络的在实践中的应用。他 大致是这么说的:
贝叶斯网络相关的技术,简单来说,它是一种因果的推理。比如说,我知道一个5亿人群体里的300万人的一些信息,再结合这300万人其他领域的标签,我们大概可以推测一下,其他4亿9千7百万人的这些数据是怎么样一个分布。
因为,做风控模型的时候,如果数据是这样:比如说1亿人里面,我有前100万人的某些标签,另100万人的其他标签……这样的标签其实是不完整的,实际操作中十分难用。
前海征信去年做了一个数据融合项目,就是想把这些零散的标签数据融合起来,放到模型里,让它变得更能帮助他们做决策——这块其实技术难度很高。
最后,据介绍,他们用了贝叶斯网络相关技术后,去看他们的模型表现,效果大概提高了30%左右。
(摘自雪梨酱发在DT专栏里的文章:前海征信卅伍研究院:为了对付“老赖”,我们打入了他们内部 - 知乎专栏
3#
论智  3级会员 | 2018-10-3 20:34:34
首先你需要了解什么是朴素贝叶斯分类器
朴素贝叶斯分类器通过假设每一个特征的出现都是独立事件,简化了计算复杂度,也避免了样本稀疏的问题。虽然这一假设常常是不准确的,但朴素贝叶斯在实际工程中出乎意料地好用。因为很多应用并不在乎精确的类概率,只关心最后的分类结果。
然而,当特征之间相关性比较强,而我们又要求比较精确的类概率的时候,朴素贝叶斯就不够用了。
也就是说,下面的式子里
  1. p [f1, f2 .. fn]
复制代码
不好算了。
  1. pSucc [f1, f2 .. fn] S =    (p S) * (pSucc S [f1, f2 .. fn]) / (p [f1, f2 .. fn])
复制代码
回顾一下,如果
  1. [f1, f2 .. fn]
复制代码
是独立事件,那我们有:
  1. p [f1, f2 .. fn] =    (p f1) * (p f2) * .. * (p fn)
复制代码
现在每一项特征的概率可能受其他特征的影响。假设有一个函数
  1. pp
复制代码
可以表达这些影响:
  1. p [f1, f2 .. fn] =    (pp f1) * (pp f2) * .. * (pp fn)
复制代码
那么问题就在于
  1. pp
复制代码
是如何定义的?
既然
  1. pp
复制代码
表达的是某一事件受其他事件的影响,那
  1. pp
复制代码
就可以用条件概率来定义:
  1. pp f = pSucc (influenced f) f
复制代码
对于给定的特征
  1. f
复制代码
,我们找出所有影响它的特征
  1. [inf1, inf2 .. infn]
复制代码
  1. influenced f =    pSucc [inf1, inf2 .. infn] f
复制代码
  1. pSucc [inf1, inf2 .. infn] f
复制代码
这看起来是不是很熟悉?我们讨论幼稚贝叶斯的时候提到的是
  1. pSucc [f1, f2 .. fn] S
复制代码
。这两者的结构是一样的。
因此,这其实是一个递归调用幼稚贝叶斯分类器的问题。
基于同样的思路,我们可以处理
  1. (pSucc S [f1, f2 .. fn])
复制代码
.
不过实际工程中,因为数据量很大,递归调用贝叶斯分类器是吃不消的。所以为了降低计算复杂度,我们需要进行一些简化
  • 当影响程度很低时,我们直接忽略,视为独立事件。
  • 我们只考虑直接影响给定特征
    1. f
    复制代码
    的特征,不考虑间接影响。例如,
    1. pinf1
    复制代码
    可能通过影响
    1. inf1
    复制代码
    来间接影响
    1. f
    复制代码
    ,这种情况不考虑。
  • 当我们考虑影响给定特征
    1. f
    复制代码
    的特征时,假定这些影响
    1. f
    复制代码
    的特征是相互独立事件。
当然,如果有必要,上面的简化也可以放宽,以提高计算复杂度为代价,获得更准确的估计。
进行上述简化后,我们得到了贝叶斯网络(Bayesian network)

一个简单的贝叶斯网络贝叶斯网络中,特征间的相互影响关系,我们用有向无环图(DAG)来表示。在数学上,我们用图(Graph)来表示对象间的相互关系。图由结点(代表对象)和(代表关系)组成。如果边具有方向,那么得到的图就称为有向图。对于一个有向图而言,如果从任一节点出发,都无法经过若干条边回到该节点,那么这个有向图就称为有向无环图。在贝叶斯网络中,我们用有向无环图的边的方向,表示某个特征对另一个特征的影响。无环则保证特征间的相互影响关系不会陷入无穷无尽的循环。
特征对给定特征的具体影响程度,我们用条件概率表(CPT)来表示。条件概率表这个概念很容易理解。下图就展示了一个简单的贝叶斯网络中各特征的条件概率表。

最后,特征间的相互影响关系,也就是DAG的构建,依赖于经验或领域知识。条件概率表,则可以用朴素贝叶斯来改进。
2#
小杰  4级常客 | 2018-10-3 20:34:33
我自己找到一篇很通俗易懂的案例
英语原文:http://www.norsys.com/tutorials/netica/secA/tut_A1.htm
以下内容摘录自www.norsys.com,根据实例内容意译译文。
贝叶斯网络应用实例一:胸部疾病诊所(Chest Clinic)
假想你是Los Angeles一名新毕业的医生,专攻肺部疾病。你决定建立一个胸部疾病诊所,主治肺病及相关疾病。大学课本已经中告诉你了肺癌、肺结核和支气管炎的发生比率以及这些疾病典型的临床症状、病因等,于是你就可以根据课本里的理论知识建立自己的Bayes网。如根据如下数据信息:
  • 美国有30%的人吸烟.
  • 每10万人中就就有70人患有肺癌.
  • 每10万人中就就有10人患有肺结核.
  • 每10万人中就就有800人患有支气管炎.
  • 10%人存在呼吸困难症状, 大部分人是哮喘、支气管炎和其他非肺结核、非肺癌性疾病引起.
根据上面的数据可以建立如下BN模型:


这样的一个BN模型对你意义不大,因为它没有用到来你诊所病人的案例数据,不能反映真实病人的情况。当诊所诊治了数千病人后,会发现课本中所描述的北美的情况与实际诊所数据显示的情况是完全不同的,实际诊所数据显示:
  • 50%的病人吸烟.
  • 1%患有肺结核.
  • 5.5% 得了肺癌.
  • 45% 患有不同程度支气管炎.
    将这些新数据输入到BN模型中,才真正的获得了对你有意义的实用BN模型:


    现在,看看如何在日常诊断中用该BN模型。
  • 首先,应该注意到,上述模型反映了一个来诊所求医的新患者,为诊断之前我们没有这个患者的任何信息。而当我们向患者咨询信息时,BN网中的概率就会自动调整,这就是贝叶斯推理最完美、强大之处。贝叶斯网络最强大之处在于从每个阶段结果所获得的概率都是数学与科学的反映,换句话说,假设我们了解了患者的足够信息,根据这些信息获得统计知识,网络就会告诉我们合理的推断。
    现在看看如何增加个别病人信息调节概率。一个女病人进入诊所,我们开始和她谈论。她告诉我们她呼吸困难。我们将这个信息输入到网络。我们相信病人的信息,认为其存在100%呼吸困难。

    可以观察到,一旦病人有呼吸困难症状,三种疾病的概率都增大了,因为这些疾病都有呼吸困难的症状。我们的病人存在这样的症状,某种程度上我们会推断这三种疾病可能性比较大,也增加了我们患者有严重疾病认识的信念。
  • 仔细看看推断的过程:
      明显增大的是支气管炎,从 45% 到 83.4%. 为什么会有如此大的增长呢?因为支气管炎病比癌症和肺结核更常见. 只要我们相信患者有严重的肺部疾病,那最支气管炎的可能性会更大些。
    • 病人是抽烟者的几率也会随之增大,从50% 到63.4%.
    • 近期访问过亚洲的几率也会增大: 从1% 到1.03%, 显然是不重要的.
    • X光照片不正常的几率也会上涨,从11% 到16%.
    知道现在我们还无法确认什么疾病困扰着我们的这个女患者,我们目前比较相信她患有支气管炎的可能性很大,但是,我们应该获得更多信息来确定我们的判断,如果我们现在就主观定了病症,她可能得的是癌症,那我们就是一个烂医生。这就需要更多信息来做最后的决定。
    因此,我们按照流程依此问她一些问题,如她最近是不是去过亚洲国家,吃惊的是她回答了“是”。现在获得的信息就影响了BN模型。


  • 患肺结核的几率显然增大,从 2%到 9%. 而患有癌症、支气管炎以及该患者是吸烟患者的几率都有所减少。为什么呢?因为此时呼吸困难的原因相对更倾向于肺结核。
    继续问患者一些问题,假设患者是个吸烟者,则网络变为


    此时注意到最好的假设仍然是认为患者患有支气管炎。为了确认我们要求她做一个X光透视,结果显示其正常。结果如下:


  • 这就更加肯定我们的推断她患有支气管炎。
  • 如果X光显示不正常的话,则结果将有很大不同:

    Note the big difference. TB or Lung Cancer has shot up enormously in probability. Bronchitis is still the most probable of the three separate illnesses, but it is less than the combination hypothesis of TB or Lung Cancer. So, we would then decide to perform further tests, order blood tests, lung tissue biopsies, and so forth. Our current Bayes net does not cover those tests, but it would be easy to extend it by simply adding extra nodes as we acquire new statistics for those diagnostic procedures. And we do not need to throw away any part of the previous net. This is another powerful feature of Bayes nets. They are easily extended (or reduced, simplified) to suit your changing needs and your changing knowledge.

    Summary

    In this section we learned that a Bayesian network is a mathematically rigorous way to model a world, one which is flexible and adaptable to whatever degree of knowledge you have, and one which is computationally efficient.
    注意最大的区别。结核病或肺癌增加的概率极大。支气管炎仍然是三个独立的疾病中最可能的一个,但它小于"结核或肺癌"这一组合的假设。所以,我们将决定进行进一步测试,血液测试,肺组织活检,等等。我们当前的贝叶斯网不包括这些测试,但它很容易扩展,只需添加额外的节点作为我们获得新的统计数据的诊断程序。我们不需要扔掉以前的任何部分。这是贝叶斯网的另一个强大的功能。他们很容易扩展(或减少,简化),以适应不断变化的需求和变化的知识。

    总结

    在本节中,我们了解到,贝叶斯网络是一个用严格的数学方法来模拟一个世界的方法,是灵活的,适应于任何你拥有的知识程度的方法,同时也是计算效率的方法。
    本文引用地址:http://blog.sciencenet.cn/blog-82650-255141.html 此文来自科学网邱士利博客

    最后说下,这篇文章用到了一个叫做netica的软件,我无聊将它破解掉了,去除了一些限制,各位有需要的可以在这里下载
    链接: 百度云 请输入提取密码 密码: 1qav
    -------------20170127更新
    鉴于大家都想对贝叶斯网路进一步了解,这里推荐一些资料:
    《贝叶斯网引论》链接: https://pan.baidu.com/s/1qYxvvdU 密码: 7iv8
    netica官方文档 http://www.norsys.com/WebHelp/NETICA.htm
    R语言贝叶斯网络的包 Bayesian network structure learning
    R语言pcalg包 CRAN - Package pcalg
  • 您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    积分:
    帖子:
    精华:
    期权论坛 期权论坛
    发布
    内容

    下载期权论坛手机APP