-
2021-11-10 15:54:33
目录
一、背景知识
1.朴素贝叶斯分类器原理
2.条件概率
三、补充知识
1.学习器、模型、分类器
四、总结
一、背景知识
1.朴素贝叶斯分类器原理
(1)基于“贝叶斯理论”和特征“条件独立”的假设,的一种分类算法。
(2)流程:
①(因为特征条件独立)假设学习数据的概率分布服从正态分布 why??
②基于此正态分布,对于给定的特征数据x,使用贝叶斯定理算出label y
(3)此算法实现简单、预测效率高、是常用的分类算法
2.条件概率
(1)定义:
概率指的是某一事件
A
发生的可能性,表示为P(A)
。而条件概率指的是某一事件A
已经发生了条件下,另一事件B
发生的可能性,表示为P(B|A)
(2)计算:
设
A,B
是两个事件,且P(A)>0
,则P(B|A)=P(AB)/P(A)为B的条件概率(
其中P(AB)
表示事件A和事件B同时发生的概率,只有A和B无条件独立时才为P(A)*P(B),但此时只是条件独立)
3.乘法定理
(1)定义
将条件概率的公式两边同时乘以
P(A)
,就变成了乘法定理,即P(AB)=P(B|A)*P(A)=P(A|B)*P(B)
这给出了,当A和B为两个事件(不知道是否独立)时,计算A,B同时发生的概率的方式。
且表明,其与顺序无关。
4.全概率公式
(1)定义
当为了达到某种目的,但是达到目的有很多种方式,如果想知道通过所有方式能够达到目的的概率是多少的话,就需要用到全概率公式
(2)计算
事件C即为你想达到的目的,B为各种你可以使用的方法,但是你只能选择一个。
即:P(C)=P(B1C)+P(B2C)+...
5.贝叶斯公式
当已知引发事件发生的各种原因的概率,想要算该事件发生的概率时,我们可以用全概率公式。但如果现在反过来,已知事件已经发生了,但想要计算引发该事件的各种原因的概率时,我们就需要用到贝叶斯公式了。
其就是使用了乘法定理+调换了顺序+用全概率公式展开:
三、补充知识
1.模型的别称叫作“学习器”,模型指:通过某些算法,对一些训练集进行学习后形成的模型,可以对未来进行预测判断。 “学习器”顾名思义,通过某种方法(即:算法)学习了一些数据,而形成了自己的规律(判断准则)。
分类器即为分类模型。
2.特征
样本属性
3.条件独立
定义:某些相互影响的事件可以在某些条件的成立下相互独立。
转载自其他博主:
条件有时为不独立的事件之间带来独立(gain independence),有时也会把本来独立的事件,因为此条件的存在,而失去独立性(lose independence),如下(本身,P(XY)=P(X)P(Y)P(XY)=P(X)P(Y),二者独立);
P(X,Y∣∣C)≠P(X|C)P(Y|C)
P(X,Y|C)≠P(X|C)P(Y|C)
事件独立时,联合概率等于概率的乘积。这是一个非常好的数学性质,然而不幸的是,无条件的独立是十分稀少的,因为大部分情况下,事件之间都是互相影响的。然而,通常这种影响又往往依赖于其他变量而不是直接产生。由此我们引入条件独立(conditional independent,CI)。给定 ZZ 下,XX 与 YY 是条件独立的当且仅当:X⊥Y|Z⇔P(X,Y|Z)=P(X|Z)⋅P(Y|Z)
X⊥Y|Z⇔P(X,Y|Z)=P(X|Z)⋅P(Y|Z)
也即 XX 与 YY 的依赖关系借由 ZZ 产生。例如,定义如下事件:
XX:明天下雨;
YY:今天的地面是湿的;
ZZ:今天是否下雨;
ZZ 事件的成立,对 XX 和 YY 均有影响,然而,在 ZZ 事件成立的前提下,今天的地面情况对明天是否下雨没有影响。
————————————————
版权声明:本文为CSDN博主「五道口纳什」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lanchunhui/article/details/536965504.贝叶斯理论
四、总结
条件概率:B在A已经完成的条件下的概率
P(B|A)=P(AB)/P(A)
乘法定理:A、B在不独立的情况下(独立时也可以用),同时发生的概率
P(AB)=P(B|A)*P(A)
全概率公式:
当已知引发事件发生的各种原因的概率,想要算该事件发生的概率时,我们可以用全概率公式贝叶斯公式:已知事件已经发生了,但想要计算引发该事件的各种原因的概率时
更多相关内容 -
朴素贝叶斯分类模型完整代码
2020-03-12 12:16:13从读取文件、去除重用词、正则化、到词向量、再到预测分类。最后ROC曲线评估,一整套(带数据集),下载即运行。如果好用,还请给个好评 -
朴素贝叶斯分类模型(一)
2019-01-28 17:29:22四、朴素贝叶斯分类器 总结 前言 什么是分类算法 通俗地讲分类算法就是把大量已知特征及类别的样本对象输入计算机,让计算机根据这些已知的类别与特征归纳出类别与特征之间的规律(准确地说应该是分类模型)...目录
前言
什么是分类算法
通俗地讲分类算法就是把大量已知特征及类别的样本对象输入计算机,让计算机根据这些已知的类别与特征归纳出类别与特征之间的规律(准确地说应该是分类模型),最终目的是运用得到的分类模型对新输入的对象(该对象已知特征,类别是不知道的)判断出该对象所属分类。
朴素贝叶斯分类算法
分类算法常用的有很多种,朴素贝叶斯算法是其中一个比较常用的,之所以称为朴素贝叶斯算法主要是因为该算法最基本的原理是基于贝叶斯定理的,称为朴素是因为该算法成立的前提是特征之间必须得是独立的。
朴素贝叶斯(Naive Bayes)算法理论基础是基于贝叶斯定理和条件独立性假设的一种分类方法。
一、简述贝叶斯定理
贝叶斯公式如下所示:
换个比较形象的形式也可如下
公式二很直白地说明的了贝叶斯模型的用途以及其原理。
通俗地说在 B 出现的前提下 A 出现的概率,等于 A 和 B 都出现的概率除以 B 出现的概率。
换句话说就是后验概率和先验概率的关系。
公式解说:
P(A)是先验概率,表示每种类别分布的概率;
P(B|A)是条件概率,表示在某种类别前提下,某事发生的概率;该条件概率可通过统计而得出,这里需要引入极大似然估计概念,详见后文。
P(A|B)是后验概率,表示某事发生了,并且它属于某一类别的概率,有了这个后验概率,便可对样本进行分类。后验概率越大,说明某事物属于这个类别的可能性越大,便越有理由把它归到这个类别下。
二、贝叶斯定理的推导
首先假设A和B为两个不相互独立的事件,做图如下:
由上图可以看出,在事件B已经发生的情况下,事件A发生的概率为事件A和事件B的交集除以事件B:
同理,在事件A已经发生的情况下,事件B发生的概率为事件A和事件B的交集除以事件A:
公式解说:
通过上图图形面积可以比较形象地得出上面的公式。
由上面的公式可以得到:
上式通过转换便可得到贝叶斯定理:
公式解说:
1、各个事件不相互独立,注意事件对应的特征是独立的。
P(AB) 表示 A,B 事件同时发生的概率,如果 A 和 B 是相互独立的两个事件,那么:
P(A|B) = P(A) 或 P(B|A) = P(B),因此要满足贝叶斯公式必需得各个事件不相互独立。
2、条件概率
条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。
条件概率表示为:P(A|B),读作“在B的条件下A的概率”。若只有两个事件A,B,那么,
由上面的公式同样可得到如下公式,将如下公式进行转换则也可得出贝叶斯定理:
总的来说,对于贝叶斯定理可通过画图的形式直观地通过面积占比得出,也可通过严格的条件概率定理转换而来。
三、贝叶斯定理的例子说明
- 注:例子引自李烨老师机器学习极简入门第十二课,付费课程链接
例子1:
我们假设:目前的全集是一个小学的小学一年级学生。
这个小学一年级一共100人,其中有男生30人。
穿白袜子的人数一共有20个,这20个人里面,有5个是男生。
那么请问,男生里面穿白袜子的人的出现概率为多少?
这不是废话嘛,一共30个男生,5个穿白袜子,出现概率是5/30=1/6啊。用得着贝叶斯公式吗?
如果我已经把人数都告诉你了,当然没必要算什么先后验概率。
但是我先不告诉你人数,我只告诉你:
(下面用 A 指代“穿白袜子”,B 指代“是男生”)
这个小学一年级学生里面,男生的出现概率是 0.3 —— P(B);
穿白袜子的人的出现概率是0.2 —— P(A);
穿白袜子的人是男生这件事出现的概率是0.25 —— P(B|A)。
请问你,一个人是男生又穿白袜子的出现概率 —— P(A|B)是多少?
这个时候就该贝叶斯公式出场啦:
P(A|B)=P(B|A)P(A)/P(B) ==> P(A|B) = 0.25 * 0.2 / 0.3 = 1/6
另一个简单的例子
如果你问我,明明人数都知道了,为什么还要绕个弯算概率?那么再来看另一个例子。
例子2:
把场景从一个小学的一年级转换为某个大饭店的门口,我们根据以往数据,可以计算出:
所有来吃饭的所有客人中,会有10%的人喝酒 —— P(B),
所有客人中,会有20%的人驾车前来—— P(A),
开车来的客人中,会有5%喝酒 —— P(B|A)。
那么请问,在这个饭店喝过酒的人里,仍然会开车的比例—— P(A|B)是多少?
P(A|B)=P(B|A)P(A)/P(B) ==> P(A|B) = 5% * 20% / 10% = 10%
一般化的贝叶斯公式
更一般化的情况,假设事件 A 本身又包含多种可能性,即 A 是一个集合:
,那么对于集合中任意的
,贝叶斯定理可用下式表示:
这和之前的简化版公式:
在使用上有什么区别呢?
我们还是来看一个例子
例子3:
某 AI 公司招聘工程师,来了8名应聘者,这8个人里,有5个人是985院校毕业的,另外3人不是。
面试官拿出一道算法题准备考察他们。根据以前的面试经验,面试官知道:985毕业生做对这道题的概率是80%,非985毕业生做对率只有30%。
现在,面试管从8个人里随手指了一个人——小甲,让 TA 出来做题。结果小甲做对了,那么请问,小甲是985院校毕业的概率是多大?
- 笔者解决该题的思路:首先理清该题求小甲所毕业院校实际上是根据输入的对象特征(题目做对或做错为对象特征),以及不同特征所对应的分类(对象类别:毕业于985,非毕业于985),还有目前已知的类别对应的特征概率(先验概率),求输入的对象所对应的类别。按上述思路将已知条件转换为具体数值,代入一般化的贝叶斯公式则可求出输入对象所对应类别的概率情况,求入的各个类别占比之和为1。
具体解决方法:
现在我们来看,这道题里面的小甲的毕业院校有两种可能,也就是 A={A1,A2},
A1 —— 被选中的人是985毕业的;
A2 —— 被选中的人不是985毕业的。
B —— 被选中的人做对了面试题
P(A1) = 5/8
P(A2) = 3/8
P(B|A1) = 80% = 0.8(985毕业生做对改道面试题的先验概率)
P(B|A2) = 30% = 0.3(非985毕业生做对改道面试题的先验概率)
因此:
所以,小甲是985毕业的概率是81.6%,非毕业于985为:1-0.8163
- 注意:上面的几个例子中,先验、后验事件的概率都是离散的。
- 事实上贝叶斯定理一样可以应用于连续概率的情况,假设上面的具体事件的概率不是一个确定值,而是一个分布函数,也是一样的。只不过 sum 部分变为了对应函数的积分而已。
- 连续概率的贝叶斯定理的形式为(下面所说的 A 和 B 对应之前贝叶斯公式中的的 A 与 B):
其中,f(x|y) 是给定 B=y 时,A 的后验分布;对应的 f(y|x) 是给定 A=x 时,B 的后验分布; f(x) 则是 A 的先验分布概率函数。
为了方便起见,这里的 f 在这些专有名词中代表不同的函数。
四、朴素贝叶斯分类器
“朴素贝叶斯”(Naïve Bayes)既可以是一种算法——朴素贝叶斯算法,也可以是一种模型——朴素贝叶斯分类模型(分类器)。
简洁版的贝叶斯定理:
- 在之前的几个例子中,为了便于理解,当 B 作为 A 的条件出现时,我们假定它总共只有一个特征。
- 但在实际应用中,很少有一件事只受一个特征影响的情况,往往影响一件事的因素有多个。假设,影响 B 的因素有 n 个,分别是 b1,b2,…,bn。
则 P(A|B) 可以写为:
- A 的先验概率 P(A) 和多个因素的联合概率 P(b1,b2,…,bn) 都是可以单独计算的,与 A 和 bi 之间的关系无关,因此这两项都可以被看作常数。
- 对于求解 P(A|b1,b2,…,bn),最关键的是 P(b1,b2,…,bn|A)。根据链式法则,可得:
- 上面的求解过程,看起来好复杂,但是,如果从 b1 到 bn这些特征之间,在概率分布上是条件独立的,也就是说每个特征 bi与其他特征都不相关。如下图所示:
- 那么,当 i≠j 时,有 P(bi|A,bj)=P(bi|A) —— 无关条件被排除到条件概率之外,这一点由上图可以很直观地看出。因此,当 b1,b2,…,bn 中每个特征与其他 n-1 个特征都不相关时,就有:
- 注:
是希腊字母,即π的大写形式,在数学中表示求积运算或直积运算,形式上类似于
。
- Z 对应
。
一款极简单的朴素贝叶斯分类器
上式中的 b1 到 bn 是特征(Feature),而 A 则是最终的类别(Class),所以,我们换一个写法:
这个公式也就是我们的朴素贝叶斯分类器的模型函数!
- 注:由该公式可知,当所求的分类不同时,该式 Z 对应 P(b1,b2,…,bn)永远都是固定不变的,因此当计算对象所属类别时可直接省去该公式中的分母部分。
它用来做预测时是这样的:
-
有一个朴素贝叶斯分类模型(器),它能够区分出 k 个类 (c1,c2,…,ck), 用来分类的特征有 n 个:(F1,F2,…,Fn)。
-
现在有个样本 s,我们要用 NB 分类器对它做预测,则需要先提取出这个样本的所有特征值 F1到 Fn,将其带入到下式(因为对应不同分类的分母为固定值,所以公式可简化为如下所示)中进行 k 次运算:
-
然后比较这 k 次的结果,选出使得运算结果达到最大值的那个 cj(j=1,2,…,k)—— 这个 cj 对应的类别就是预测值。求上式的最大值也可以用为如下公式表示:
注:argmax是一种函数,函数y=f(x),x0= argmax(f(x)) 的意思就是参数x0满足f(x0)为f(x)的最大值;
设我们当前有一个模型,总共只有两个类别:c1 和 c2;有三个 Feature:F1,F2和F3。F1 有两种可能性取值:f11 和 f12;F2 有三种可能性取值:f21,f22,f23;F3 也有两种可能性取值:f31,f32。
那么对于这个模型,我们要做得,就是通过训练过程,获得下面这些值:
把这些概率值都算出来以后,就可以用来做预测了。
上面那些先验概率和条件概率如何得到呢?通过在训练样本中间做统计,就可以直接获得了!
现在让我们把上面那个抽象的例子具象化,来看一个新的例子,例子4:
假设有一家小公司招收机器学习工程师,为了在更广泛的范围内筛选人才,他们写了一些爬虫,去各个招聘平台、职场社交平台爬取简历,然后又写了一个简单的分类器,来筛选他们感兴趣的候选人。
这个筛选分类器是朴素贝叶斯分类器,训练数据是现在公司里的机器学习工程师和之前来面试过这一职位,没有被录取的人员的简历。
全部数据集如下图所示:
对应符号表达含义:
注:符号“∝”表示成正比例,值得注意的是P(C=c1|x)与P(C=c2|x)这两个值之和不为1是因为这里的计算并没有带入分母,这也是主里引入正比符号的原因,但是不引入分母对于实际分类的对比是没有影响的。
体现的思路是:
在训练样本的基础上做一系列概率运算,然后用这些算出来的概率按朴素贝叶斯公式“拼装”成分类模型——这就成了朴素贝叶斯分类器。
频率 VS 概率
这也太简单了吧。
朴素贝叶斯分类器这个模型的训练过程都不需要先从模型函数推导目标函数,再优化目标函数求 Cost 最小的解吗?朴素贝叶斯公式就是朴素贝叶斯分类器的训练算法啦??
上述例子之所以这样简单,是因为我们简单地将频率当成了概率。
但在现实应用中,这种方法往往不可行,因为这种方法实际上默认了“未被观测到”的就是“出现概率为0”的。这样做显然是不合理的。
比如:上面例子中,由于样本量太小,“博士”候选人只有两位,而且全部被录取,因此对于“未被录用”的情况而言,学历是博士的条件概率就变成了0。这种情况使得学历是否是博士成了唯一决定因素,显然不合理。
虽然我们可以靠做一些简单的变换——比如加一平滑法(就是把概率计算为:对应类别样本中该特征值出现次数 + 1 /对应类别样本总数)——来规避除以0的情况,但是这样做的“准确性”仍然非常不可靠。
总结
全文主要是简单描述了贝叶斯的基本思想以及推导出朴素贝叶斯分类器的基本公式如下。对于更加深入的部分详见下一篇博文。
注:本文主要是参考李烨老师的博客以及个人的理解整理出来的,目的是为了后期以便学习与回顾,参考文献如下
1、李烨老师的机器学习极简入门(付费)
2、贝叶斯定理推导(Bayes' Theorem Induction)
5、概率论的链式法则
-
计算机研究 -基于聚类的朴素贝叶斯分类模型的研究与应用.pdf
2022-06-27 20:07:40计算机研究 -基于聚类的朴素贝叶斯分类模型的研究与应用.pdf -
基于模糊聚类的混合朴素贝叶斯分类模型.pdf
2021-08-21 11:00:45基于模糊聚类的混合朴素贝叶斯分类模型.pdf -
文本分类,使用机器学习算法,如朴素贝叶斯、逻辑回归、支持向量机等
2022-04-27 06:53:46文本分类,使用机器学习算法,如朴素贝叶斯、逻辑回归、支持向量机等 -
最新版学习笔记---Python机器学习基础教程(5)朴素贝叶斯分类模型---附完整代码
2020-05-08 22:30:05最新版学习笔记---Python机器学习基础教程(5)朴素贝叶斯分类模型---附完整代码在这里我们讲怎么用python实现朴素贝叶斯分类器,具体的关于朴素贝叶斯分类模型的详细讲解,我会在接下来的学习中涉及。
1. 朴素贝叶斯分类器概念
朴素贝叶斯分类模型是一种简单的构造分类器的方法。它将问题分为特征向量和决策向量两类(通过独立检查每个特征来学习参数,并从每个特征中收集简单的类别统计数据。),并且假设问题的特征变量都是互相府里的作用于决策变量的,也就是问题的特征之间互不相干。
朴素贝叶斯分类器是则一种与线性模型非常相类似的一种分类器。它的训练速度更快。
但是这种高效率所带来的缺点就是,朴素贝叶斯模型的泛化能力要比线性模型强。2. 朴素贝叶斯分类器分类
- GaussianNB分类器(高斯)
GaussianNB可应用于任意连续数据,主要用于高维数据,计算的时候会保存每个类别中每个特征的平均值和标准差。
- BernoulliNB分类器(伯努利)
BernoulliNB假定输入数据为二分类数据,主要用于文本数据分类,计算每个类别中每个特征不为0的元素个数。
- MultinomNB分类器(多项式)
MultinomNB假定输入数据为基数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数),主要用于文本数据分类。计算类别中每个特征的平均值。
3. 对朴素贝叶斯(高斯)分类模型进行分析
数据源是sklearn中聚类生成器(make_blobs)生成的50000个随机样本(其中每个样本的特征数为2个,共有3个类簇,样本集的标准差事1.0,随机种子数是42)
运行代码如下:from sklearn.datasets import make_blobs import numpy as np from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB n_samples=50000 centers = [(-5,-5),(0,0),(5,5)] #n_samples是待生成的样本的总数。 #n_features是每个样本的特征数。 #centers表示类别数。 #cluster_std表示每个类别的方差,例如我们希望生成2类数据, #后一类比前一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]。 #shuffle表示刷新样本,默认值为True #random_state表示随机种子数 X,y = make_blobs(n_samples=n_samples,n_features=2,cluster_std=1.0,centers=centers, shuffle=False,random_state=42) y[:n_samples // 2] = 0 y[n_samples //2 :] = 1 #RandomState(42)使每次随机生成数一样,随机种子数为42 #rand返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。 #rand的传入参数为y.shape[0]也就是50000,返回含有50000个元素的一维数组 sample_weight = np.random.RandomState(42).rand(y.shape[0]) X_train,X_test,y_train,y_test,sw_train,sw_test=train_test_split(X,y,sample_weight, random_state=42) clf = GaussianNB() clf.fit(X_train,y_train)#训练模型 print("accurcy score :{:}".format(clf.score(X_test,y_test)))#测试模型
输出分类结果:
accurcy score :0.8331
在这里只是简单的介绍了一下怎么使用朴素贝叶斯分类器。就不举其余两个的例子了,但是我们需要了解,BernoulliNB和MultinomNB都只有一个参数alpha用于控制模型复杂度。alpha越大,平滑化越强,模型复杂度越低。但是alpha对模型性能并不是很重要,但是调整这个参数通常会使精度有所提高。
- 完整代码都在文章里面全部可以运行
- 有不懂得地方和问题请留言
- 这是一个系列,大家可以收藏一下以后学习用得到
-
机器学习算法/模型——朴素贝叶斯分类
2020-02-23 21:02:35朴素贝叶模型原理1.1朴素贝叶斯模型:将频率当成概率(不可靠)1.2 朴素贝叶斯模型:条件概率的参数估计2. 朴素贝叶斯的目标函数总结: 0. 概念/术语 贝叶斯公式 贝叶斯定理:在 B 出现的前提下 A 出现的概率,等于...贝叶斯分类
贝叶斯分分类器是一种生成模型,可以处理多分类问题,是一种非线性模型。
0. 本质和概述
0.1 本质
核心:将样本判定为后验概率最大的类
朴素贝叶斯算法,是一种通过根据新样本的已有特征在数据集中的条件概率(后验概率)来判断新样本所属类别的算法,其将样本判定为后验概率最大的类。
之所以称之为“朴素”,因为它假设:
① 每个特征之间相互独立
② 每个特征同等重要。注意:因为各个属性间相互独立,所以类条件概率等于每个属性的类条件概率的乘积
0.2 贝叶斯公式
- 贝叶斯定理
在 B 出现的前提下 A 出现的概率,等于 A 和 B 都出现的概率除以 B 出现的概率。
我们希望确定一个具有某些特征的样本属于某类标签的概率,通常记为 P (L |特征 )。贝叶斯定理告诉我们,可以直接用下面的公式计算这个概率:
(L 为某个标签)-
直观理解
打个最简单的比方来理解贝叶斯公式的作用——为什么判断一个新东西属于某种类别(条件概率)可以通过各种类别本身的特性(类条件概率)来完成:问题:判断一个金发碧眼高鼻梁的美女来自日本还是俄罗斯。
显而易见,因为俄罗斯这个分类下的人种数据,绝大多数都是由“金发”、“碧眼”和“高鼻梁”特征的人构成的,而日本却不是。只需要根据先验知识,就可以轻易得出结论,这就是类条件概率的牛B之处。当然,前提是“独立同分布假设”,这是一切的前提。
怎么理解这句话,可以返回去看看贝叶斯公式能如何起作用。
1. 朴素贝叶模型原理
1.1朴素贝叶斯模型:将频率当成概率(不可靠)
“朴素贝叶斯”(Naïve Bayes)既可以是一种算法——朴素贝叶斯算法,也可以是一种模型——朴素贝叶斯分类模型(分类器)。
朴素贝叶斯算法可以直接利用贝叶斯定理来实现。
在实际应用中,很少有一件事只受一个特征影响的情况,往往影响一件事的因素有多个。假设,影响 B 的因素有 n 个,分别是 b1,b2,…,bn。则 P(A|B) 可以写为:
求解该式子,最关键的是分子 P(b1,b2,…,bn|A),根据链式法则,分子有:
上面的求解过程,看起来好复杂,但是,如果从 b1 到 bn 这些特征之间,在概率分布上是条件独立的,也就是说每个特征 bi 与其他特征都不相关。那么,当 i≠j 时,有 P(bi|A,bj)=P(bi|A) —— 无关条件被排除到条件概率之外。因此,当 b1,b2,…,bn中每个特征与其他 n-1 个特征都不相关时,就有:
注意:此处的 Z 对应 P( b1,b2,…,bn)。上式中的 b1 到 bn 是特征(Feature),而 A 则是最终的类别(Class),所以,我们换一个写法即可得到朴素贝斯分类器的模型函数:
1.2 朴素贝叶斯模型:条件概率的参数估计
-
贝叶斯公式
-
一般化的贝叶斯公式
更一般化的情况,假设事件 A 本身又包含多种可能性,即 A 是一个集合:A={A1,A2,…,An},
那么对于集合中任意的 Ai,贝叶斯定理可用下式表示:
贝叶斯公式是要找出组成发生事件B的各个样本空间,然后预测事件B的发生来自于Ai的概率。其中 P(Ai) 称为原因的先验概率。它是在不知道事件B是否发生的情况下获取的概率。
而 P(Ai | B) 是原因的后验概率。它是在知道了事件B发生的条件下,有了这个进一步的信息后,判断原因 Ai 发生的概率有多大。一般地,如果对样本空间做了大于1的划分,即:
不难推断出:
也就是说在获取了进一步的信息B后,原因的后验概率一般大于原因的先验概率。
P(classification | data) = P ( c l a s s i f i c a t i o n ) ∗ P ( d a t a ∣ c l a s s i f i c a t i o n ) P ( d a t a ) \frac{P(classification) * P(data | classification)}{P(data)} P(data)P(classification)∗P(data∣classification)
注:在贝叶斯公式中,要求后验概率 P(classification | data) ,利用贝叶斯公式将其其转化为求解 :
P(classification) * P(data | classification) / P(data)这次求解模式在机器学习中被称为:生成式(generative models)模式。
P(data) 是与类标记无关的量,可以看做是一个常数;
P(classification) 表达了各类样本所占的比例,根据大数定律,当训练集包含了充足的独立同分布样本时,P(classification)可以通过各类样本出现的频率来进行估计。
而关键就是求解 P(data | classification) 即 data相对于classification的概率。
2. 朴素贝叶斯的目标函数
-
类的后验概率 P(c | x)
也就是我们需要求解的问题
-
类条件概率 P(x | c)
类条件概率,它等于在训练集中属于类别 c 的所有样本中,所有属性组合的样本出现的概率。
在类所属的特征间相互独立的前提假定下有:
其中,d是样本的所有属性个数。
这个意思是说,因为各个属性间相互独立,所以类条件概率等于每个属性的类条件概率的乘积。
因此,联合上面两个式子,可以得到如下式子:
- 目标函数
由于对所有类别来说,P(x)是相同的,因此贝叶斯分类器的目标函数进一步化简为如下:
其中 c 为所有类别中的每一个,称上面式子为朴素贝叶斯分类器的目标函数。
明显地,朴素贝叶斯分类器的训练学习的过程便是基于训练数据,求得类的先验概率P©,并且为每个属性求得类条件概率,然后相乘取最大值的过程。
3. 代码
一种快速创建简易模型的方法就是假设数据服从高斯分布,且变量无协方差(no covariance,指线性无关)。只要找出每个标签的所有样本点均值和标准差,再定义一个高斯分布,就可以拟合模型了。
注:朴素贝叶斯常用的三个模型有:
高斯模型:处理特征是连续型变量的情况
多项式模型:最常见,要求特征是离散数据
伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0- 构造数据
from sklearn.datasets import make_blobs X, y = make_blobs(100, 2, centers=2, random_state=2, cluster_std=1.5) plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu');
- 模型拟合
from sklearn.naive_bayes import GaussianNB model = GaussianNB() model.fit(X, y)
- 新数据
# 新数据 rng = np.random.RandomState(0) Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2) ynew = model.predict(Xnew)
- 可视化并查看决策边界
# 可视化新数据,查看决策边界的位置 plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu') lim = plt.axis() plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='RdBu', alpha=0.1) plt.axis(lim);
# 可以用 predict_proba 方法计算样本属于某个标签的概率 yprob = model.predict_proba(Xnew) yprob[-8:].round(2) # 这个数组分别给出了前两个标签的后验概率
4. 总结
- 贝叶斯公式——模型构造
- 大数定律——估计 P(label)
- 极大似然估计——求解 P(feature | label)
- 概率估计的平滑处理——
4.1 加一平滑法
把概率计算为对应类别样本中该特征值出现次数 + 1 /对应类别样本总数,来规避除以0的情况
4.2 拉普拉斯修正
之所以称为“朴素”或“朴素贝叶斯”,是因为如果对每种标签的生成模型进行非常简单的假设,就能找到每种类型生成模型的近似解,然后就可以使用贝叶斯分类。不同类型的朴素贝叶斯分类器是由对数据的不同假设决定的。
参考
- 贝叶斯定理
-
朴素贝叶斯分类(python实现)
2022-03-15 14:20:00朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。 对缺失数据不太敏感,算法也比较... -
python实现朴素贝叶斯分类器
2020-12-31 17:09:37用的模型也是最简单的,就是用贝叶斯定理P(A|B) = P(B|A)*P(A)/P(B),计算每个类别在样本中概率(代码中是pLabel变量) 以及每个类下每个特征的概率(代码中是pNum变量)。 写得比较粗糙,对于某个类下没有此特征的... -
机器学习系列 13:贝叶斯分类 01 - 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器
2019-04-13 13:16:36本内容将介绍 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器。 -
机器学习:多项式模型朴素贝叶斯分类器(原理+python实现)
2021-01-20 11:21:52多项式朴素贝叶斯也是多用于文本处理,其原理和计算的流程和伯努利朴素贝叶斯基本一致,唯一的区别在于单词的计数方式,由《伯努利朴素贝叶斯》一文可知,在文本处理的环节中,我们将单词是否出现在词组作为特征,但... -
机器学习实战之朴素贝叶斯(二)文本分类
2020-12-20 21:58:07朴素贝叶斯(二)文本分类朴素贝叶斯的一般流程用python进行文本分类准备数据:从文本中构建词向量训练算法:从词向量计算概率测试算法:朴素贝叶斯分类函数文档词袋模型 朴素贝叶斯的一般流程 (1)收集数据:任何... -
python实现基于朴素贝叶斯的垃圾分类算法
2020-09-19 03:09:10主要为大家详细介绍了python实现基于朴素贝叶斯的垃圾分类算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
数据挖掘——朴素贝叶斯分类
2022-04-10 20:08:30朴素贝叶斯分类器(Naive Bayes Classifier,或 NBC) TAN BAN GBN 数据挖掘之朴素贝叶斯分类 • 朴素贝叶斯分类器有坚实的数学基础,以及稳定的分类效率。同时,此模型所需估 计的参数很少,对缺失数据不太敏感,算法... -
机器学习:伯努利朴素贝叶斯分类器(原理+python实现)
2021-01-06 21:29:19伯努利朴素贝叶斯分类器主要用于文本分类,下面我们以一个具体的例子,来讲述下伯努利朴素贝叶斯的原理和实现逻辑。 具体例子: 已知我们有八个句子以及每个句子对应的类别,即中性或侮辱性。那么再给出一个句子,... -
朴素贝叶斯分类
2017-07-12 15:10:46朴素贝叶斯分类的实现 -
Naive-Bayesian-Subject-Line-Classifier:使用朴素贝叶斯算法将电子邮件主题行分类为垃圾邮件
2021-06-30 13:56:45朴素贝叶斯主题行分类器使用朴素贝叶斯算法将电子邮件主题行分类为垃圾邮件/非垃圾邮件。 通过查找两个类别(即垃圾邮件/非垃圾邮件)中每个唯一单词的出现频率来工作,并使用从新电子邮件主题输入的训练中提取的... -
论文研究-基于引力模型的朴素贝叶斯分类算法.pdf
2019-07-22 17:50:58针对朴素贝叶斯分类器在分类过程中不同类别的同一特征量之间由于存在相似性,易导致误分类的现象,提出基于引力模型的朴素贝叶斯分类算法。提出以引力公式中距离变量的平方作为相似距离,应用引力模型来刻画特征与其... -
朴素贝叶斯文本分类数据集
2020-08-31 15:07:10朴素贝叶斯 分类算法数据集文本挖掘(Text Mining,从文字中获取信息)是一个比较宽泛的概念,这一技术在如今每天都有海量文本数据生成的时代越来越受到关注。目前,在机器学习模型的帮助下,包括情绪分析,文件分类... -
【python 文本分类】sklearn朴素贝叶斯分类模型
2019-02-22 14:56:50训练一个线性模型来进行分类 使用网格搜索策略找到特征提取组件和分类器的最佳配置 核心: 为了在文本文件中执行机器学习算法, 我们首先要做的是将文本内容转化成数值形式的特征向量。 文本的预处理, 分词以及... -
高斯朴素贝叶斯分类的原理解释和手写代码实现
2022-04-07 10:30:39朴素贝叶斯假设每个参数(也称为特征或预测变量)具有预测输出变量的独立能力。所有参数的预测组合是最终预测,它返回因变量被分类到每个组中的概率,最后的分类被分配给概率较高的分组(类)。 什么是高斯分布? ... -
python编写朴素贝叶斯用于文本分类
2020-12-24 12:00:49朴素贝叶斯是基于贝叶斯定理与特征条件独立分布假设的分类方法。首先根据特征条件独立的假设学习输入/输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。 具体的,根据... -
机器学习算法-朴素贝叶斯分类
2022-03-21 11:09:28本片记录了我学习机器学习朴素贝叶斯分类以及拉普拉斯优化的知识,并且实现了简单的垃圾邮件分类以及恶意评论的判别。 -
python实现朴素贝叶斯算法
2020-09-19 22:28:48主要为大家详细介绍了Python实现朴素贝叶斯算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
K近邻、朴素贝叶斯以及分类模型评估
2020-10-07 18:00:37K近邻、朴素贝叶斯以及分类模型评估 K近邻算法 K-近邻定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别; 距离计算公式:欧式距离、曼哈顿... -
朴素贝叶斯分类算法
2019-11-28 15:20:15朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,... -
贝叶斯分类器(一):朴素贝叶斯分类器与半朴素贝叶斯分类器
2016-11-09 15:28:03贝叶斯分类器理论知识。包括贝叶斯决策论,朴素贝叶斯分类器,半朴素贝叶斯分类器。