CPD是conditional probability distribution的缩写,翻译成中文叫做 条件概率分布。在概率图中,条件概率分布是一个非常重要的概念。因为概率图研究的是随机变量之间的练习,练习就是条件,条件就要求条件概率。

  对于简单的条件概率而言,我们可以用一个条件概率表来表达。如图1所示。图1 中表达的是p(g|i,d)。幸运的是id都只有两个取值,是一个伯努利分布的函数。但是如果i d 有六个取值呢?比如骰子。那么这张表就会猛然增加到6^2那么长。这是不科学的。并且,常规情况下,仅考虑疾病诊断问题,如果有多种原因都会导致某个症状,那么我们要表达 症状|疾病 那么就会变得分成复杂,表有有2^N那么长,N是疾病的数目。

  所以,我们需要一种简单的方法,能够简化CPD的表达,除了用表之外,还应该有比较优雅的手段。

1.树状CPD

  很多随机变量依赖于多个随机变量,但这多个随机变量的优先级别都不一样。就像找对象,首先要是个学生,然后要漂亮,最后要聪明。这三个并不是同时要求的,所以树状结构的CPD就利用了这个思想,把各级“并联”变成了串联。本来job依赖于 c L ,但是L 又是依赖于c 的,所以就转成了树状的CPD.特点是该有的概率都在图里能读出来。但是却又另外指定了一些图里没有的逻辑关系。

2.片选CPD

  片选CPD(Multiplexer CPD),实际上是对应一种情况:随机变量A一旦指定后,Y的取值就仅和其中一个父节点有关。这是一个实际问题,比如天上有很多飞机,它们的速度都是随机变量(Y),塔台指定一架飞机观测之后,随机变量Y就只与指定的那架飞机有关。那么条件概率就有以下表达:

3.噪声或CPD

  噪声或CPD(Noise OR CPD)对应的情况是:咳嗽可能由很多因素引起,这些因素的或结果是咳嗽。 咳嗽<--感冒<---受凉。 但是受凉并不一定会感冒,也就是说,受凉不一定会导致咳嗽,那么相当于受凉和感冒之间存在一个噪声。这种情况下,咳嗽的概率就变成了1-不咳嗽的概率,不咳嗽的概率可以表示为乘积。

  这里的或,也可以是与,也可以是取最大等等。。。。。总之,这一类设计方法对应的CPD可以简化表示。

4.Sigmoid CPD

  Sigmoid 是机器学习中的概念,还是接着上面那个例子,如果单纯用或,有时候太绝对了。直觉上我们有可能会认为,如果多个因素都会导致某个问题,那么多个因素共同发生的时候就会让问题“雪上加霜”。 比如单纯的丑不一定找不到女朋友,丑+猥琐? 丑+坏+犯罪? 显然我们应该设计一个打分体系,女朋友这个随机变量变成多个因素的函数。简单考虑所有的条件都是二项分布的(要么帅要么丑)各个条件对女朋友的影响不同,用权重wi来表示。最终,将加权结果用 Sigmoid函数来评判。

5. 线性高斯CPD

  上述情况我们都把随机变量当成离散的来考虑。然后真实世界里,哪有那么多非黑即白的情况呢。比如一个机器人从多个传感器测量距离墙壁的距离(Xi),最终需要融合多个传感器的数据,估计距离墙壁的真实距离(Y),那么实际上就是一个 P(Y|X1,X2,X3.....)的问题。我们可以用线性高斯模型,来给出Y的概率。

  这里非常值得注意的是,所有的X,也可以是高斯的。但是Y的均值应该是X的均值之和。并且假设Y的方差不受到X方差的影响。

6.总结

  这一章节实际上是为了解决多变量条件下,条件概率表达式的复杂性问题。 单纯的基于图模型的因式分解确实可以大规模的减少概率模型中的因子 ( 链 --->  贝叶斯链)。 但是如果再给出一些其他假设,或者选择合适的建模手段,条件概率的表达式复杂程度又可以进一步降低。

最新文章

  1. Hadoop_UDF示例
  2. Android 线程模型
  3. Android退出程序时的&quot;再按一次退出&quot;实现
  4. kettle内存溢出
  5. MySQL运行原理与基础架构
  6. c#中关于大对象数组的一些心得
  7. 转 gl_VertexID的含义
  8. Week1绪论--抽象数据类型
  9. Spring系列之装配Bean
  10. [jzoj]2938.【NOIP2012模拟8.9】分割田地
  11. mycat 安装 分表 分库 读写分离
  12. 阿里云服务器配置phpstudy实现域名访问【图文教程】
  13. python自动化开发-[第十九天]-分页,cookie,session
  14. ArrayList类中的contains()方法底层依赖的是equals()方法
  15. Android 音视频深入 十一 FFmpeg和AudioTrack播放声音(附源码下载)
  16. win32汇编(ASM)学习资源
  17. AFNetworking2.0简易GET,POST请求封装以及使用
  18. prometheus监控redis
  19. PHP面向对象之接口
  20. JavaScript-CasperJs使用教程

热门文章

  1. windows下Python版本切换使用方法
  2. Vugen使用技巧
  3. cb19a_c++_只适合string类型的操作_提取_追加_替换
  4. WIN10下如何解决PL2303驱动不可用的问题或者com口显示黄色感叹号usb-to-serial
  5. 为什么启动线程是start方法?
  6. Java内存溢出OutOfMemoryError的产生与排查
  7. 使用Kubeflow构建机器学习流水线
  8. Java并发编程-Java内存模型
  9. Spring mvc 面试
  10. 07 . Prometheus监控Memcached并配置Grafana