朴素贝叶斯与贝叶斯网络详解

文章目录

  • 一、背景
    • 1.1 贝叶斯方法的提出
    • 1.2 频率派与贝叶斯派的区别
  • 二、分类问题
  • 三、基础知识
    • 3.1 条件概率
    • 3.2 联合概率
    • 3.3 贝叶斯公式
    • 4.1 贝叶斯网络介绍
    • 4.2 贝叶斯网络的基本结构
      • 4.2.1 head-to-head(共同作用)
      • 4.2.2 tail-to-tail(共同原因)
      • 4.2.3 head-to-tail(因果迹)
      • 4.2.4 tail-to-head(证据迹)
  • 五、朴素贝叶斯
    • 5.1 朴素贝叶斯介绍
    • 5.2 朴素贝叶斯定义
    • 5.3 朴素贝叶斯三部曲
    • 5.4 估计类别下特征属性划分的条件概率以及Laplace校准
    • 5.5 朴素贝叶斯分类实例——检测SNS社区中的真实账号
  • 六、贝叶斯网络
    • 6.1 朴素贝叶斯的缺点
    • 6.2 贝叶斯网络
  • 参考资料

一、背景

长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大。而且概率虽然未知,但最起码是一个确定的值。比如如果问那时的人们一个问题:“有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率是多少?”他们会想都不用想,会立马告诉你,取出白球的概率就是1/2,要么取到白球,要么取不到白球,即θ只能有一个值,而且不论你取了多少次,取得白球的概率θ始终都是1/2,即不随观察结果X 的变化而变化。

频率学派之所以能得出这样的结论,是因为他们研究的对象是**”简单可数的“**。比如袋子里只有黑球或者白球、一个硬币抛出只有正面和反面、一个骰子只有1-6个点。

可是现实生活中的事物并没有那么简单直观。例如,要你评估一个人的创业成功可能性。难道这时你还可以直接说50%吗?还用”要么成功要么不成功“这句话去解释吗?很显然是不合理的,因为这件事情已经不是简单可数的了。影响创业成功与否的因素有很多,例如这个人是否勤奋、是否具有创业头脑、是否拥有一定的人脉、是否可以团结周围的伙伴同事等等。这是一个连续且不可数的事件空间,

1.1 贝叶斯方法的提出

在18世纪,贝叶斯发表了一篇名为《An essay towards solving a problem in the doctrine of chances》的论文。贝叶斯学派认为事物发生的概率是随机且未知的,但是可以通过样本去预测它。用一句话概括贝叶斯方法的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界的真实变化而随机修正,我对世界永远保持开放的态度。

回到上面的例子:“有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率θ是多少?”贝叶斯认为取得白球的概率是个不确定的值,因为其中含有机遇的成分。比如,一个朋友创业,你明明知道创业的结果就两种,即要么成功要么失败,但你依然会忍不住去估计他创业成功的几率有多大?你如果对他为人比较了解,而且有方法、思路清晰、有毅力、且能团结周围的人,你会不由自主的估计他创业成功的几率可能在80%以上。这种不同于最开始的“非黑即白、非0即1”的思考方式,便是贝叶斯式的思考方式。

贝叶斯学派认为事物发生的概率是随机且未知的,但是可以通过样本去预测它。用贝叶斯学派的理论去回答上述创业问题:假如这个人比较勤奋,那么可以推断创业成功率在80%以上,这称作”先验概率估计“。但是随着公司的运营,你发现公司的财务状况非常差,此时可以推断创业成功率由80%下降到30%,这称作”后验概率估计“。贝叶斯学派的这种动态的估计方法,就是贝叶斯方法。贝叶斯方法思考问题遵循的方式是:

先验分布 + 观测结果 => 后验分布

此处给出先验概率和后验概率的解释:

  • 先验概率是 在全事件的背景下,A事件发生的概率,即P (A | Ω)
  • 后验概率是 在新事件B的背景下,A事件发生的概率,即P (A | B)

全事件一般是统计获得的,是没有实验前的概率,所以被称为先验概率。
新事件一般是通过实验获得的,如事件B,此时事件背景从全事件变成了事件B,该事件B对A发生的概率会产生影响,所以需要对A事件的概率做出修正,即从P (A | Ω)变成了P (A | B),所以被称为后验概率。

1.2 频率派与贝叶斯派的区别

频率派与贝叶斯派具有不同的思考方式:

  • 频率派把需要推断的参数θ看做是固定的未知常数,即概率虽然是未知的,但最起码是确定的一个值,同时,样本X 是随机的,所以频率派重点研究样本空间,大部分的概率计算都是针对样本X 的分布;
  • 而贝叶斯派的观点则截然相反,他们认为参数是随机变量,而样本X 是固定的,由于样本是固定的,所以他们重点研究的是参数的分布。

二、分类问题

可以说,利用贝叶斯算法,就是来解决分类问题的。贝叶斯算法是分类算法的一种,这类算法都以著名的贝叶斯定理为基础。

对于分类问题,大家都不陌生。说的夸张一点,我们每个人在每天的生活中,都会进行分类。例如,当你走在大街上,你会下意识地判断迎面走来的这个人是男性还是女性;当你走在路上看到一个穿着亮丽的人时,你会下意识地和身边的朋友说:”这个人肯定很有钱“。这些实际上都是分类操作。

这里必须明白,分类器往往是根据经验方法来构造的,因为现实生活中缺少足够多的信息去构造一个100%正确率的分类器,只是在某种程度上实现一定概率意义上正确的分类器。例如,医生给病人看病就是一个典型的分类问题。任何一个医生都不可能直接看出病人患了什么病,只是通过病人的体征、描述和身体检查单给出相对正确的结果,这时医生就是一个分类器。而这个分类器的效果好坏,取决于这位医生接受的教育、病人患病症状是否明显、医生的经验是否充足等因素。

所以通俗地说,利用贝叶斯算法解决问题,首先要得到的就是分类器。还是上个例子,想要获得一个诊断病情的分类器,就需要事先喂给它足够大的样本,例如患病体征A对应疾病B的概率是多少等等这样的概率关系。当样本处理完毕之后,说白了就是概率运算,分类器也就得到了。此时代入新的病人的病情,即可获得输出。

事实上,利用贝叶斯方法解决问题,也分为不同的方式。其中最简单的就是朴素贝叶斯,即NBN(Naive Bayesian Network)。之所以称为朴素贝叶斯,是因为它的思想真的很朴素,实现起来也较为容易,可行性很强,是我们解决问题最常用的一种方法。具体内容稍后阐述。

三、基础知识

在进入贝叶斯方法之前,我们需要掌握以下基础知识,它们是贝叶斯网络的重要概念组成部分。

3.1 条件概率

又称为后验概率,就是事件A在事件B已经发生的条件上发生的概率。表示为P (A | B),计算公式为:

在这里插入图片描述

3.2 联合概率

联合概率表示两个事件共同发生的概率。A与B的联合概率表示为:
在这里插入图片描述

即事件A和事件B同时发生的概率为:在A发生的情况下发生B,或者在B发生的情况下发生A。

3.3 贝叶斯公式

贝叶斯公式可以直接根据条件概率及联合概率的定义直接推出。即因为 P(A,B) = P(A)P(B|A) = P(B)P(A|B),所以 P(A|B) = P(A)P(B|A) / P(B)
在这里插入图片描述

P(A|B)是在B发生的情况下A发生的可能性,其中:

  • P(A)称为A的先验概率,表示事件B发生之前,我们对事件A的发生有一个基本的概率判断。
  • P(A|B)称为A的后验概率:表示其事件B发生之后,我们对事件A的发生概率重新评估。
  • P(B)称为B的先验概率,表示事件A发生之前,我们对事件B的发生有一个基本的概率判断。
  • P(B|A)称为B的后验概率:表示事件A发生之后,我们对事件B的发生概率重新评估。

贝叶斯公式之所以有用,是因为我们在日常生活中,很容易求出P (B | A),但是我们真正想要的是P (A | B),往往这个P (A | B)并不是那么直观易求的。贝叶斯公式就为我们打通了这条线路。

贝叶斯网络(Bayesian network),又称信念网络(Belief Network),或有向无环图模型(directed acyclic graphical model),是一种概率图模型。

4.1 贝叶斯网络介绍

贝叶斯网络中的节点表示随机变量,有向边表示变量之间有因果关系(非条件独立),两个用箭头连接的节点就会产生一个条件概率值,如下图所示:
在这里插入图片描述

G = ( I , E ) G=(I, E) G=(I,E) 表示一个DAG,其中 I I I是图形中所有节点的集合, E E E 是所有有向边的集合,函数 p a ( x ) pa(x) pa(x) 表示从子节点x到父节点的映射。令 x i x_i xi 表示DAG中某一节点i代表的随机变量,则概率 p ( x i ) p(x_i) p(xi) 可以表示成:

在这里插入图片描述
则称此DAG为贝叶斯网络模型。

注意,贝叶斯网络有一个极为重要的性质:每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点。

这条特性的重要意义在于明确了贝叶斯网络可以方便计算联合概率分布。一般情况下,多变量非独立联合条件概率分布有如下求取公式:

在这里插入图片描述

而在贝叶斯网络中,由于存在前述性质,任意随机变量组合的联合条件概率分布才可以被化简成上述带有映射关系 p a ( x ) pa(x) pa(x) 的计算公式。

许多经典的多元概率模型都是贝叶斯网络的特例,例如朴素贝叶斯模型、马尔科夫链、隐马尔科夫模型、卡尔曼滤波器、条件随机场等等。

4.2 贝叶斯网络的基本结构

三节点对应的三角结构是贝叶斯网络信息流动的最基本结构,下面介绍4种经典的信息流动结构。

4.2.1 head-to-head(共同作用)

根据上图以及链式法则,有P(a,b,c) = P(a) * P(b) * P(c|a,b)成立,因为P(c|a,b) = P(a,b,c)/P(a,b),将P(a,b,c)消除,从而得到P(a,b) = P(a)*P(b)。

因为我们可以得到:

  • 当c未知时,a和b是被阻隔的,是独立的,称之为head-to-head条件独立。
  • 当c已知时,a和b不独立,a的信息可以沿着c流向b。

我们可以形象地理解为,将abc想象成河流,两条小河(a、b)流入一条大河(c),当c是未知时,a-> c <-b之间的流动是阻断的,那么影响将无法沿着“a-> c <-b”流动。形如“a-> c <-b”的这种结构也称为一个v-结构(v-structure)。

4.2.2 tail-to-tail(共同原因)

同样的,根据上图和链式法则,我们可以得到:P(a,b,c) = P© * P(a|c) * P(b|c)。

  • 当c未知时,我们没办法通过上式得到P(a,b) = P(a) * P(b)。因此c未知时,a、b不独立,a可以通过c影响b。
  • 当c已知时,有P(a,b|c) = P(a,b,c) / P©,将上式的P(a,b,c)代入进来,就可以得到P(a,b|c) = P(a|c) * P(b|c),从而得到a和b在此条件下是独立的。因此当c已知时,a和b被阻断,a和b是独立的。
    我们可以形象地理解为,一条大河流到c节点的时候要分成两条支流,当c给定的时候,即c节点放开,此时a和b就是两条互不影响的支流,因此是相互独立的。

4.2.3 head-to-tail(因果迹)

同样的,根据上图和链式法则,我们可以得到:P(a,b,c) = P(a) * P(c|a) * P(b|c)。

  • 当c未知时,我们没办法通过上式得到P(a,b) = P(a)*P(b)。因此c未知时,a、b不独立,a可以通过c影响b。
  • 当c已知时,有P(a,b|c) = P(a,b,c) / P© 和 P(a,c) = P(a) * P(c|a),将这两式代入上述式子,即可得到P(a,b|c) = P(a|c) * P(b|c),从而得到a和b在此条件下是独立的。因此当c已知时,a和b被阻断,a和b是独立的。

4.2.4 tail-to-head(证据迹)

同样的,根据上图和链式法则,我们可以得到:P(a,b,c) = P(b) * P(c|b) * P(a|c)。

  • 当c未知时,我们没办法通过上式得到P(a,b) = P(a)*P(b)。因此c未知时,a、b不独立,a可以通过c影响b。
  • 当c已知时,有P(a,b|c) = P(a,b,c) / P© 和 P(b,c) = P(b) * P(c|b),将这两式代入上述式子,即可得到P(a,b|c) = P(a|c) * P(b|c),从而得到a和b在此条件下是独立的。因此当c已知时,a和b被阻断,a和b是独立的。

五、朴素贝叶斯

5.1 朴素贝叶斯介绍

朴素贝叶斯分类是一种非常简单的分类方法,它最突出的特点就是:假设分类项的的各个特征之间是相互独立的!

正是因为这个特点,才使得整个朴素贝叶斯的可操作性很高,并且思想简单易懂。

朴素贝叶斯的思想就是:对于给出的待分类项,求解在此分类项的条件下,各个类别哪个出现的概率最大,取概率最大的那个类别为该待分类项的类别。

通俗来说,就好比这么个道理:你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

5.2 朴素贝叶斯定义

在这里插入图片描述

5.3 朴素贝叶斯三部曲

根据上述朴素贝叶斯的定义,可以看出朴素贝叶斯分类大致分为三个阶段:

第一阶段——准备工作阶段:确定待分类项的所属集合,例如{亚洲人,美洲人,非洲人},接着确定特征属性,例如{肤色,身高,眼睛颜色},与此同时要对这些特征属性进行划分,例如什么样的人种对应什么样的眼睛颜色。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是唯一需要人工处理的阶段,其质量对于整个过程有着重要的影响,因为接下来分类器的质量很大程度上取决于特征属性、特征属性的划分和训练样本的质量。

第二阶段——分类器训练阶段:这个阶段就是生成分类器。主要工作就是计算每个类别在训练样本中的出现频率和在每个类别的条件上特征属性出现的概率。这一阶段的输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,可以由程序自动完成。

第三阶段——应用阶段:这个阶段就是利用分类器对待分类项进行分类,输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,可由程序自动完成。

5.4 估计类别下特征属性划分的条件概率以及Laplace校准

在这里插入图片描述

5.5 朴素贝叶斯分类实例——检测SNS社区中的真实账号

下面举出一个用朴素贝叶斯解决实际问题的例子。

对于SNS(Social Networking Services)社区来说,虚假账号的存在是一个普遍性问题,作为SNS社区的运营商,他们希望检测出这些虚假账号,从而在一些运营分析报告中避免这些账号的干扰,从而加强对SNS社区的了解和监督。

如果采用人工检测,那么难度可想而知,如果可以引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是对社区中的账号进行分类,是真实账号还是虚假账号,下面我们一步步实现这个过程。

首先设 C = 0 C=0 C=0 表示真实账号, C = 1 C=1 C=1 表示虚假账号。

第一步——确定特征属性及其划分:
这一步我们要找出能够区分真实账号和虚假账号的特征属性。在实际的应用中,特征属性的数量肯定是很多的,此处仅采用少量的特征属性进行说明。

我们选择三个特征属性:

  • a1 :日志数量/注册天数,
  • a2 :好友数量/注册天数,
  • a3:是否使用真实头像。

在SNS社区中,这三个特征属性都是可以直接从数据库中算出来的。

下面给出这三个特征属性的划分:
a1 : {a <= 0.05,0.05 < a < 0.2,a >= 0.2},
a2 : {a <= 0.1,0.1 < a < 0.8,a >= 0.8},
a3 : {a = 0(未采用),a = 1(采用)}

第二步——获取训练样本:

这里使用运维人员曾经人工检测过的1万个账号作为训练样本。

第三步——计算训练样本中每个类别的频率:

假设训练样本中共有10000个社交账号,真实账号有8900个,虚假账号有1100个,则有:

P ( C = 0 ) = 0.89 P(C=0)=0.89 P(C=0)=0.89
P ( C = 1 ) = 0.11 P(C=1)=0.11 P(C=1)=0.11

第四步——计算每个类别条件下各个特征属性划分的条件概率:
在这里插入图片描述
第五步——使用分类器进行鉴别:

在这里插入图片描述

六、贝叶斯网络

6.1 朴素贝叶斯的缺点

在第五章中,我们讨论了用朴素贝叶斯去解决SNS社区虚假账号的问题,在这个解决方案中,我们做出了如下假设:

  • 真实账号比非真实账号平均具有更大的日志密度、更大的好友密度、更多地使用真实头像。
    日志密度、好友密度和是否使用真实头像在账号真实性给定的条件下是独立的,也就是特征属性之间的独立性。
  • 但是第二条假设很有可能不成立,因为好友密度除了与账号真实性相关之外,还和是否使用真实头像有关。当你使用真实头像的时候,肯定是趋向于吸引更多的人加你为好友,从而拥有更大的好友密度。

6.2 贝叶斯网络

因此为了获得更准确的分类,我们采用如下假设:

  • 真实账号比非真实账号平均具有更大的日志密度、更大的好友密度、更多地使用真实头像。
  • 日志密度、好友密度和是否使用真实头像在账号真实性给定的条件下是独立的,也就是特征属性之间的独立性。
  • 使用真实头像的用户相比使用虚假头像的用户具有更大的好友密度。

上述的假设更符合真实情况,但是也伴随着一定的问题,那就是特征属性之间不再是相互独立的了,而是存在了依赖关系,使得朴素贝叶斯不再适用了。下图表示各个特征属性之间的关联:

在这里插入图片描述

。。。。。。

参考资料

  • 贝叶斯网络 Bayesian Network:https://zhuanlan.zhihu.com/p/542482587

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26434.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习AJAX

AJAX &#x1f680; HTTP请求报文响应报文 &#x1f684; express框架&#x1f6ac; express基本使用 &#x1f692; 原生AJAX&#x1f6ac; GET.HTML&#x1f6ac; POST.HTML&#x1f6ac; JSON.HTML&#x1f6ac; nodemon工具可以帮助重启服务&#x1f6ac; IE缓存问题&#…

订单系统、报名、预约、表单系统 定制开发功能展示

安装教程环境说明&#xff1a;正常情况下PHP5.3-5.6、阿帕奇、mysql安装即可 安装说明&#xff1a; 1、上传源码压缩包到网站根目录&#xff08;这个请去问下空间商哪个是根目录&#xff0c;每家服务器商不一样&#xff0c;我们也不能确定&#xff0c;请确定是根目录再安装&am…

【C++初阶】类和对象(上)

文章目录 前言一、类的引入二、类的定义三、类的访问限定符及封装四、类的作用域五、类的实例化六、类对象模型七、this指针 前言 &#x1f4d6;面向过程 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。以…

pytorch学习第一篇:conda配置jupyter notebooks pytorch

安装jupyter notebooks 创建一个pytorch的环境 conda create -n pytorch python3.10 conda activate pytorch安装jupyter notebook&#xff0c;运行命令 conda install jupyter notebook启动jupyter 运行命令 jupyter notebook或者 notebook查看pyhton版本 import sys p…

【数据结构】_3.List接口实现类ArrayList与线性表

目录 1.List接口 1.1 List接口的集合关系网络 1.2 List的使用 2. ArrayList与顺序表 2.1 线性表 2.2 顺序表 2.3 ArrayList 2.3.1 ArrayList的集合关系网络 2.3.2 ArrayList的使用 2.3.2.1 ArrayList的构造方法 2.3.2.2 ArrayList的扩容机制逻辑示图如下&#xff1…

【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码

【江西省研究生数学建模竞赛】题目之一 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 相关链接 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MA…

Thread-local storage is not supported for the current target

xcode编译时遇到上述报错&#xff0c;解决办法&#xff1a;调整最低系统版本配置

BUFG/BUFGCE/BUFH/BUFHCE

对BUFG/BUFGCE/BUFH/BUFHCE简单了解。 下图为 7 系列 FPGA 时钟架构图&#xff1a; BUFG 全局时钟缓冲器。它的输入是IBUFG的输出&#xff0c;BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源&#xff0c;能减少信号…

【C】字符串函数和内存函数的介绍

库函数&#xff08;这些函数都在头文件string.h中&#xff09; 字符串函数求字符串长度strlen 长度不受限的字符串函数strcpystrcmpstrcat 长度受限的字符串函数strncpystrncmpstrncat 字符串查找strstrstrtok 错误信息报告strerror 字符操作字符分类函数字符转换函数 内存函数…

API开发,机器人api二次开发

由于自身在机器人方面滚爬多年&#xff0c;尝试了很多次&#xff0c;选择了一个信任的工具 可以给有需要的朋友们借鉴一下 开发起来很方便&#xff0c;技术也已经挺成熟的了 贴一点简单的给大家看下呢 测试文档&#xff1a;https://www.wkteam.cn/ 简要描述&#xff1a; …

.net6中WPF的串口通信和USB通信

之前写过串口通信&#xff0c;不过是winform的。 c#使用串口进行通信_c# 串口通信_故里2130的博客-CSDN博客 今天说一下&#xff0c;.net6中wpf的串口通信和USB通信&#xff0c;在工控行业中&#xff0c;这2种的方式非常多&#xff0c;还有网口通信&#xff0c;它们都是用来和…

微信小程序下拉选择

微信小程序中下拉框选择一般的交互方式有以下两种 直接下拉选择点击选择框后&#xff0c;弹出浮层进行选择 下边分别介绍两种方式的实现。在微信小程序中&#xff0c;这两种实现都需要修改三个文件 js 文件&#xff1a;下拉选择逻辑的具体实现 wxml 文件&#xff1a;下拉组件…