美文网首页
4-pgmpy-扩展推理方法

4-pgmpy-扩展推理方法

作者: 梦想成为小仙女 | 来源:发表于2019-04-06 20:37 被阅读0次

简单的说就是自己给pgmpy模型添加新的功能,这里目标,实现方法,经验总结

3.jpg

在运行的时候就发现了问题,是因为源代码导入的product包没有了

0.重点

  • 迭代器
  • 可迭代对象
    一类是集合数据类型,如list、tuple、dict、set、str等;
    一类是generator,包括生成器和带yield的generator function。
    这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
    可以使用isinstance()判断一个对象是否是Iterable对象:
    ---------廖雪峰
  • 迭代器
    而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。
    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    可以使用isinstance()判断一个对象是否是Iterator对象:
    ---------廖雪峰
  • 可迭代对象和迭代器的关系
    • 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
      把list、dict、str等Iterable变成Iterator可以使用iter()函数:
    • Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
      Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
      • 凡是可作用于for循环的对象都是Iterable类型;
        凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
        集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
  • 元祖(python)
    元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
    元组中的元素类型也可以不相同
  • 列表(python)
    List(列表) 是 Python 中使用最频繁的数据类型。
    列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
    列表是写在方括号([])之间、用逗号分隔开的元素列表。
    和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
  • 集合(python)
    集合(set)是一个无序的不重复元素序列。
    可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
    ------菜鸟教程
    Python 3.x中的set特征与数学中类似。我们之前学过list、tuple以及dict。其实,set与dict大致相同,但set没有Value,只有key。因此,set只是一组key的集合。由于key不能重复,所以,在set中,没有重复的key。
    -------SmallWZQ
  • 生成器
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
    --------廖雪峰

一.目标

这里我们要给pgmpy添加新的推理算法,我们会将模型参数边缘化得到需要的查询结果

二.实现方法

1.一个简单的精确推理算法
- itertools库的chain方法
image.png
- *self.factors.values()
http://pgmpy.org/factors.html#module-pgmpy.factors.discrete.DiscreteFactor
self.factors是字典结构的数据,key(节点):[该节点的相关因子]
- factor_product:
image.png
- factor_reduce
image.png
- normalize:
image.png
- DiscreteFactor:
image.png
- marginalize:
image.png
- state:
image.png
- set
image.png
简单的说就是传入贝叶斯模型,观测节点和证据节点,然后执行一下操作:
1.将所有参数数组合并成一个迭代器(可以简单的理解为将所有参数竖着排列)
2.然后将所有值进行笛卡尔积运算得到联合概率分布
3.设置联合概率分布中的证据节点,对其进行降级
4.对降级后的结果进行归一化处理
5.得到除去观察节点和证据节点
6.对剩下的节点进行边缘化处理
7.返回一个只有观测节点和已知证据节点的条件概率分布
2.定义一个模型

简单的说分为三步

  • 创建模型结构
  • 定义节点条件概率表
  • 将条件概率表与模型结合
3.在定义的模型上推理

简单的说分为三步

  • 将定义好的模型传递给刚刚创建的类
  • 调用类中的query方法,并传递观测节点和证据节点
  • 输出返回的结果

三.总结

相关文章

  • 4-pgmpy-扩展推理方法

    简单的说就是自己给pgmpy模型添加新的功能,这里目标,实现方法,经验总结 在运行的时候就发现了问题,是因为源代码...

  • Kotlin-面向对象-进阶

    扩展 扩展方法 Kotlin支持扩展方法和扩展属性。语法:被扩展的类/接口名.方法名() 父类不能使用子类的扩展方...

  • 03:经济学是一门科学吗?

    1、科学有两类方法,实验方法和推理方法,后者主要包括归纳推理和演绎推理。归纳推理是由特殊到一般,而演绎推理是由一般...

  • 扩展方法

    扩展方法: 扩展方法的类必须声明为static 扩展方法本身也必须声明为static 扩展方法必须包含关键字thi...

  • Swift- Extension

    扩展属性(只能是计算属性) 扩展构造器 扩展方法 通过扩展方法, 可以修改该实例self本身.但是方法前要加 mu...

  • ES6新增特性(二)

    ES6 的内置对象扩展 Array 的扩展方法 一、Array 的扩展方法 1. 扩展运算符(展开语法) 扩展运算...

  • JQuery写拓展

    基础 $.extend()扩展JQuery静态方法,$.fn.extend()扩展JQuery实例方法静态方法: ...

  • 23、扩展方法

    1.定义: 2.定于扩展方法 Personl类的定义 为Person类扩展方法 扩展方法被定义为静态方法,但它们是...

  • [IOS]优化UIButton的点击事件

    调用方法 添加扩展方法

  • 假设推理

    在推理小说当中,除了演绎推理和归纳推理,还有一种很重要的推理方法,叫假设推理。 假设推理通常用于事件发生时,已知条...

网友评论

      本文标题:4-pgmpy-扩展推理方法

      本文链接:https://www.haomeiwen.com/subject/iobppqtx.html