草庐IT

高级人工智能系列(一)——贝叶斯网络、概率推理和朴素贝叶斯网络分类器

KindBrave 2023-03-28 原文

高级人工智能系列(一)——贝叶斯网络、概率推理和朴素贝叶斯网络分类器

初学者整理,如有错误欢迎指正。

原创地址

一、概率论基础

1.1 样本空间 Ω

样本空间是随机试验中所有可能的取值的集合。

比如,掷骰子,结果有1-6 六种可能,那么样本空间即:

\(Ω = \{1, 2, 3, 4, 5, 6\}\)


1.2 事件空间

样本空间的一个子集。


1.3 条件概率

简单地,现有事件A和事件B,
条件概率 P(A|B)表示事件A在事件B发生的条件下发生的概率

条件概率计算公式:

\(P(A|B)\) = \(P(AB) \over P(B)\)

更一般地,条件概率公式可以扩展到多条件情况:

\(P(A|B_1,B_2,...,B_n)\) = \(P(A,B_1,B_2,...,B_n) \over P(B_1,B_2,...,B_n)\)

即分子是A和条件的联合概率,分母是条件的联合概率。

根据条件概率公式,可得到乘法公式

\(P(AB)\) = \(P(A|B) P(B)\)

\(P(A,B_1,B_2,...,B_n)\) = \(P(A|B_1,B_2,...,B_n) P(B_1,B_2,...,B_n)\)

根据上式可以看出,乘法公式可以链式递归

观察上述乘法公式,等式右侧仍然包含联合概率

\(P(B_1,B_2,...,B_n)\)

它仍然可以利用乘法公式进行变换:

\(P(B_1,B_2,...,B_n)\) = \(P(B_1|B_2,...,B_n) P(B_2,...,B_n)\)
\(P(B_2,...,B_n)\) = \(P(B_2|B_3,...,B_n) P(B_3,...,B_n)\)

\(...\)

\(P(B_{n-1},B_n)\) = \(P(B_{n-1}|B_n)P(B_n)\)

整理可得:

\(P(B_1,B_2,...,B_n)\) = \(∏^n_{i=1}P(B_i|B_1,...,B_{i-1})\)


1.4 伯努利大数定律

在日常生活中,我们很自然地会使用频率去估计一个事件的概率。那么其背后的理论是什么?是伯努利大数定律(?定绿)

伯努利大数定律告诉我们:

进行n重伯努利试验(e.g. 抛n次硬币),其中A事件发生了m次,其概率是p,频率是\(m \over n\).那么,存在任意一个正数ε,使得:

\(lim_{n->∞}\) \(P\{|{m \over n} - p| < ε\} = 1\)

即n->∞时,频率是依概率收敛到概率的。

二、贝叶斯法则

我们可以将\(P(A|B)\)\(P(B|A)\)这两个条件概率通过贝叶斯公式联系起来:

\(P(A|B)\) = \(P(B|A) P(A) \over P(B)\)

  • 其中\(P(A|B)\)叫做后验概率,所谓后验概率,就是说A在B发生的条件下发生的概率,是有一个先决条件的;
  • \(P(A)\)叫做先验概率,因为\(P(A)\)表示在没有任何前提条件的情况下A发生的概率;
  • \(P(B|A)\)叫做似然;
  • \(P(B)\)叫做归一化常数(即只把\(P(B)\)当作一个系数来对待),它可以通过全概率公式

\(P(B)\) = \(∑_iP(B|A_i)P(A_i)\)

求得。

这里有必要解释一下全概率公式以更好理解。把A看作一个整体,而B是其中的一部分,那么很容易得到P(B)就是B在A中的占比。现在,将A分成n分,即\(A_1\),...,\(A_n\),此时P(B)就变成了B在\(A_i\)中的占比,比上\(A_i\)在A中的占比,i是从1~n的整数。即上述的全概率公式。

三、贝叶斯网络

贝叶斯网络的拓扑结构是一个有向无环图(DAG)。其节点表示随机变量,如果两个节点之间有因果关系或者非条件独立,则两节点之间会建立一条有向边,有向边由父节点指向子节点

下面是一个警报网络的贝叶斯网络图:

graph TB; Burglary-->Alarm Earthqk-->Alarm Alarm-->John Alarm-->Mary

上述贝叶斯网络图表达的意思是:入室盗窃和地震都可能引发警报器报警,而警报器报警可能会让John和Mary给主人打电话以通知主人。


3.1 贝叶斯网络的三种连接方式

贝叶斯网络中节点的连接方式有三种:顺连、分连和汇连(下图依次从左到右)

graph TB; A --> B B --> C D --> E D --> F G --> J H --> J

顺连

当B未知时,变量A的变化会影响B的置信度的变化,从而间接影响C的置信度,所以此时A间接影响C,A和C不独立。当变量B的置信度确定时,A就不能影响B,从而不能影响C,此时A和C独立,因为此时A和C的通道被阻断了。

分连

分连代表一个原因导致多个结果,当变量D已知时,变量E和F之间就不能相互影响,是独立的,而当变量D未知时,D可以在变量E和F之间传递信息,从而使变量E和F相互影响从而不独立。

汇连

汇连与分连恰好相反,代表多个原因导致一个结果,并且当变量J已知时,变量G的置信度的提高会导致变量H的置信度的降低,从而H和H之间会相互影响所以是不独立的。而当J未知时,变量G和H之间置信度互不影响,他们之间是独立的。

总结

  • 顺连中,中间变量B未知时,A C不独立,已知时独立;
  • 分连中,中间变量D未知时,E F不独立,已知时独立;
  • 汇连中,中间变量J未知时,G H独立,已知时不独立。

3.2 贝叶斯网络中的全概率公式与概率表

贝叶斯网络中的全概率公式有Parent原则,即:

\(P(X_i)\) = \(∏P(X_i|Parent(X_i))\)

例如上述贝叶斯网络图中,全概率:

\(P(B,E,A,J,M)\) = \(P(J|A) P(M|A) P(A|B,E) P(B) P(E)\)

如果某些变量不需要,只需要边缘化不需要的变量(即使其不参与运算即可)

ps.倒是不好理解了,直接考虑\(P(X_i)\) = \(∏P(X_i|Parent(X_i))\)更容易理解一些。


那么,如何在贝叶斯网络中进行事件判断?仍然以警报网络为例,可以看到每个事件发生的概率如下图,其中根节点(B、E)是先验概率,非根节点(A、J、M)则是后验概率(条件概率):

可以看到,上图中每个节点都有一个概率表,表示当前节点在其父节点的条件下(后验概率),不同取值的概率。通过概率表,可以方便地找到每个事件发生与否的可能性。比如:

说明在发生地震、没有发生入室盗窃的情况下,警报器响铃的概率

该事件定在了警报器,那么,只需要在警报器的概率表中寻找“+e、-b、+a”的概率,得到结果0.29。


四、概率推理

概率推理属于推理的一种形式,是根据一系列不确定的信息作出决定时的推理。比如,仍然是第三节中警报网络的例子,其中一个概率推理可以是:

John给主人打电话,警报响了,在这种情况下发生入室盗窃的概率。

实际上,概率推理在实际生活中应用非常广泛,比如医疗行业。我们去医院进行多项检查,会得到很多结果。那么如果推断我们可能会有哪些疾病呢?就可以根据一系列检查数值作为前提,进行概率推理,从而得出患有某种疾病的概率。

概率推理是基于贝叶斯网络及其概率表进行计算的。概率表是根据一个节点的父节点进行条件概率计算得到的,然而只有概率表中的条件概率并不足够推理,但是它可以作为概率推理计算的基础。

概率推理有大类:精确推理和近似推理。我们依次进行介绍。


4.1 精确推理

顾名思义,精确推理需要完整地计算从而得到结果。我们通过例子来理解精确推理。

举一个医疗相关例子:

上图是一个贝叶斯网络图,其中概率表已经给出。下面,需要计算:

  • 在一个人戴口罩(Mask+)、患了咽炎(Pharyngitis+)且没有密接(Close Contact-)的情况下,他吸烟(Smoke+)的概率。

这看似是一个很奇怪的问题,事实上,通过概率推理,可以得出结果,因为这是一个简单的条件概率:

\(P(S+|M+,P+,CC-)\) = \(P(S+,M+,P+,CC-) \over P(M+,P+,CC-)\)

= \(P(S+,M+,P+,CC-) \over {P(S+,M+,P+,CC-) + P(S-,M+,P+,CC-)}\)

现在,只需要计算\(P(S+,M+,P+,CC-)\)\(P(S-,M+,P+,CC-)\),即可得到目标结果。

其中,

其中,联合概率计算通过3.2节介绍的Parent原则得到,这里不再赘述。

可以看到,未参与联合概率运算的隐变量,需要对其每个可能的取值都取一遍。因为在这个例子中,F,V,C的取值均为“取或不取”两种,所以可以看到,每个隐变量都需要取+和-两个值。这时,∑求和项数为 \(2^n,(n=3)\)

为何将分母拆成两项?不拆开不也是计算分子和分母两个联合概率吗?其实拆开后更加简单,因为原分母有三个变量已知,S、C、F、V四个变量未知,这样会增加计算项数。即∑求和项数会从\(2^3\)增加到\(2^4\)个。

其中,联合概率分解后的条件概率或先验概率,均可以在概率表中查阅到,进行计算即可得到最终结果。


4.2 近似推理

可以看到,精确推理计算复杂度非常高,上述例子仅仅是三个隐变量,就已经需要大量计算了。在实际情况下,隐变量个数甚至可以为百余个,假设每个变量取值有两个,那么也需要\(2^{100}\)项,这是无法在短时间计算出结果。

此时,需要进行近似推理。近似推理的思想就是采样。采样是以概率论相关知识作为背景的,即:从一个总体中采样,那么得到的样本是可以近似总体的,因为样本和总体具有一致性。

近似推理有三种方法:随机数生成法、拒绝采样和似然加权采样。下面分别进行介绍。


4.2.1 随机数生成法

对于精确计算比较复杂的情况,可以使用随机数生成器进行采样,得到样本来进行近似估计。

举一个例子以更好理解,贝叶斯网络和概率表见下图:

其中,Cloudy表示是否是多云天气;Sprinkler表示草丛浇灌设备是否工作;Rain表示是否下雨;WetGrass表示草丛是否干燥。

现在问:

草丛不是干燥的,那么今天下雨的概率是多少?

如果进行精确推理,需要计算:

\(P(+R|-W)\) = \(P(+R,-W) \over P(-W)\)

= \(P(+R,-W) \over {P(+R,-W) + P(-R,-W)}\)

除W、R外,还有隐变量C,S,即共需要计算 \(2 * 2^2\)项,每项需要计算3次乘法,计算量对于人工来说还是有一些的。

那么,如何使用随机数生成法呢?步骤如下:

  • 对于n个节点,需要n个随机数生成器,每个随机数生成器负责一个节点的随机数生成;
  • 需要从根节点开始进行随机数生成,直到所有节点均已生成随机数;
  • 对于每个节点,根据随机数的范围(0-1)进行选择(e.g. +或者-);
  • 需要注意的是,父节点的选择,会影响其选择,具体可通过下面例子感受。
根据上述步骤,我们实际操作一遍。

1.首先根节点C的随机数生成器开始工作,假设生成了随机数0.3,即对应了+C;
2.下面节点S的随机数生成器开始工作,假设生成了随机数0.6。请注意!S是要受父节点C的选择的影响。
  因为C选择了+C,那么就要在+C的条件下去对应0.6,得到了结果-S;
3.同理,假设节点R的随机数生成器生成了0.4,那么需要在+C的条件下去对应0.4,得到了结果+R;
4.节点W的随机数生成器生成了0.9,那么需要在-S和+R的条件下对应0.9,得到了结果+W。

这一次生成得到的结果是:
+C -S +R +W  (1)

假设接下来生成的结果如下:
-C +S -R -W  (2)
+C -S +R -W  (3)
+C -S +R +W  (4)
-C +S -R +W  (5)
...

还记得问题吗?

草丛不是干燥的,那么今天下雨的概率是多少?

如何通过上述生成的5个样本,来估计这个概率?

  • 首先,要找到符合结果的样本,即草丛不是干燥的:-W;
  • 然后,在符合-W的样本中,去计算下雨:+R的概率。

得到的5个样本中,符合-W的是(2)(3)样本,其中+R的是(3),那么可以得到问题的答案是:50%。

(因为样本过少,得到的结果不够准确。这里是用频率来估计概率,考虑伯努利大数定律,当样本数量足够大时,频率是依概率收敛到概率的。)


4.2.2 拒绝采样

考虑4.2.1中的问题,其中只有W和R两个变量用到了,而隐变量C和S完全没有用到,但是使用随机数生成法时,仍然耗费时间去生成了它们对应的随机数了。

所以,可以考虑在生成随机数的过程中检测是否是一定不符合需要的一个结果,如果是,则在中途就停止本次结果的生成,这可以减少一定的时间耗费。

仍然是4.2.1中的问题,因为我们需要-W和+R的结果,那么,可以在检测到+W或者-R时,直接停止本次结果生成:

+C -S +R (停止)  (1)
-C +S (停止) (停止)  (2)
+C -S +R -W  (3)
+C -S +R (停止)  (4)
-C +S (停止) (停止)  (5)
...

这就是所谓的拒绝采样,即,拒绝继续采样每个结果中对计算概率无用的部分。


4.2.3 似然加权采样

拒绝采样的确可以减少一定的计算量,但是还不够彻底。因为中途停止的一次结果浪费掉了,但仍然耗费了一定的时间。

那么,可不可以直接生成完全符合目标的依次结果呢?答案是可以的。

仍然以4.2.1中的问题为例:

草丛不是干燥的,那么今天下雨的概率是多少?

其中只有一个条件,那就是-W,那么此时就把-W固定,即相当于让每次结果中W的值都为-W,然后其余的变量结果继续随机生成。通过这样,可以完全减少一个变量的随机生成,假设前5次的结果如下:

+C -S +R | -W  (1)
-C +S -R | -W  (2)
+C -S +R | -W  (3)
+C -S +R | -W  (4)
-C +S -R | -W  (5)

现在,我们需要在-W的基础上计算+R的概率,得到结果60%。

但是,这真的是正确的吗?不正确。

因为我们定了一个大前提,就是-W。也就是说,现在W一定是-W,这很显然是不正确的。

此时,需要进行似然加权,即给每一行结果加上一个概率权值。这个概率权值,就是我们定的变量值发生的概率是多少,这个概率就是这个变量的概率表中对应本行中其父节点们的取值的那一行。来看例子(下图是4.2.1节中的概率表,为了方便这里再次引用):

比如:W的父节点们是S和R,在(1)行中,取值是-S和+R,那么就是在\(P(W|S,R)\)这个概率表中找对应-W,-S和+R的那一行,其概率是0.1。依次得到其余行的概率表中的概率:

+C -S +R | -W  (1) p = 0.1
-C +S +R | -W  (2) p = 0.01
+C -S +R | -W  (3) p = 0.1
+C -S -R | -W  (4) p = 0.99
-C +S -R | -W  (5) p = 0.1

其中p是发生概率,也就是权值。

这个权值代表什么?因为这个权值表示:这一个结果出现的概率是p,可以认为,现在并不是一个结果,而是“p”个结果。比如(1),其p=0.1,可以理解为,如果这一条结果出现了0.1次。

这样,我们在计算频率时,不应该将一行当作一个数据看,而是应该当作p个看,此时,要计算-W的前提下+R出现的概率,就应该是:

\((0.1 + 0.01 + 0.1) \over (0.1+0.01+0.1+0.99+0.1)\) = \(16\%\)

这就是似然加权估计,即,每一条结果不是一个结果,而是出现的概率个结果。


五、朴素贝叶斯网络分类器(Naive Bayesian Classifier)

这里只做简单介绍。

所谓朴素,就是简单的意思。

一个朴素贝叶斯网络只有一个根节点,其余全部是叶子节点:

通过这个贝叶斯网络,我们可以计算:

(这里用到了“3.1贝叶斯网络三种连接方式”的知识)

假设\(T_1\)-\(T_n\)是一次体检的各项指标,那么A就可以是体检的一个结果(某项疾病)。

参考资料

1.东北大学 高级人工智能 2022秋
2.https://blog.csdn.net/cxjoker/article/details/81878188

有关高级人工智能系列(一)——贝叶斯网络、概率推理和朴素贝叶斯网络分类器的更多相关文章

  1. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  2. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  3. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  4. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  5. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  6. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  7. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  8. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  9. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  10. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

随机推荐