朴素贝叶斯概率模型在使用前可以进行特征融合吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素贝叶斯概率模型在使用前可以进行特征融合吗相关的知识,希望对你有一定的参考价值。
6.1 朴素贝叶斯模型算法原理6.1.1 一维特征向量下的贝叶斯模型
6.1.2 二维特征向量下的贝叶斯模型
6.1.3 n维特征向量下的贝叶斯模型
6.1.4 朴素贝叶斯模型简单代码演示
6.2 案例实战 - 肿瘤预测模型(分类模型)
6.2.1 案例背景
6.2.2 数据读取与划分
6.2.3 模型搭建与预测
6.3 课程相关资源
这一章主要讲解机器学习中的朴素贝叶斯模型,包括朴素贝叶斯的算法原理和编程实现。同时将介绍一个朴素贝叶斯的经典案例:判断肿瘤为良性还是恶性来巩固所学知识点。
6.1 朴素贝叶斯模型算法原理
贝叶斯分类是机器学习中应用较为广泛的分类算法之一,其产生来自于贝叶斯对于逆概问题的思考,朴素贝叶斯是贝叶斯模型当中最简单的一种。
其算法核心为贝叶斯公式:

其中P(A)为事件A发生的概率,P(B)为事件B发生的概率,P(A|B)表示在事件B发生的条件下事件A发生的概率,同理P(B|A)则表示在事件A发生的条件下事件B发生的概率。
举个简单的例子,已知流感季节一个人感冒(事件A)的概率为40%(P(A)),一个人打喷嚏(事件B)的概率为80%(P(B)),一个人感冒的条件下打喷嚏的概率为100%(P(B|A)),那么已知一个人开始打喷嚏了,他是患感冒的概率为多少?这其实就是求这个人在打喷嚏的条件下患感冒的概率P(A|B),求解过程如下图所示:

6.1.1 一维特征向量下的贝叶斯模型
我们首先以一个更详细的例子来讲解一下贝叶斯公式更加偏实战的应用:如何判断一个人是否感冒了。假设已经有5个样本数据,如下表所示:

为方便演示,这里选取了一个特征变量:打喷嚏 (X1),其中数字1表示打喷嚏,0表示不打喷嚏;这里的目标变量是感冒 (Y),其中数字1表示感冒了,数字0表示未感冒。
根据上述数据,我们要利用贝叶斯公式,来预测一个人是否处于感冒的状态,比如说,一个人打喷嚏 (X1=1),那么他是否感冒了呢,也即预测他处于感冒状态的概率为多少,在数学上,我们把此概率写作P(Y|X1)。
应用贝叶斯公式有:

根据上述数据,我们可以计算在打喷嚏 (X1=1) 的条件下,患上感冒的概率为

其中P(X1=1|Y=1)为在已经感冒的条件下打喷嚏的概率,这里感冒的4个样本中打喷嚏的有3个,所以该概率为3/4;P(Y=1)则为所有样本中感冒的概率,这里5个人中有4个人感冒,所以为4/5;P(X1=1)则为所有样本中打喷嚏的概率,这里5个人中有4个人打喷嚏,所以为4/5。
同理在打喷嚏 (X1=1) 的条件下,没有患上感冒的概率为:

其中P(X1=1|Y=0)为在未感冒的条件下打喷嚏的概率,为1;P(Y=0)则为所有样本中未感冒的概率,为4/5;P(X1=1)则为所有样本中打喷嚏的概率,为4/5。
由于3/4大于1/4,所以在打喷嚏(X1=1) 的条件下患感冒的概率要高于不患感冒的概率,所以判断该人感冒了。
6.1.2 二维特征向量下的贝叶斯模型
层层递进,我们加入另外一个特征变量:头痛(X2),其中数字1表示头痛,0表示不头痛;这里的目标变量仍为感冒(Y)。

根据上述数据,我们仍利用贝叶斯公式,来预测一个人是否处于感冒的状态,比如说,一个人他打喷嚏且头痛 (X1=1, X2=1) ,那么他是否感冒了呢,也即预测他处于感冒状态的概率为多少,在数学上,我们把此概率写作P(Y|X1,X2)。
应用贝叶斯公式有:

在比较 P(Y=1|X1,X2) 与 P(Y=0|X1,X2) 时,由于分母 P(X1,X2) 的值是相同的,所以我们在实际计算中可以舍去这部分的计算,直接比较两者分子大小即可。即:

补充知识点:独立性假设
在计算该概率之前,我们首先引入朴素贝叶斯模型的独立性假设:朴素贝叶斯模型中各特征之间相互独立,即,因此上式可以写作:

在独立性假设的条件下,我们可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下感冒的概率P(Y=1|X1,X2) ,即简化为计算 P(X1|Y=1)P(X2|Y=1)P(Y=1) (P(X1|Y)P(X2|Y)P(Y))的值:

同理可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下没有患感冒的概率 P(Y=0|X1,X2), 即简化为计算P(X1|Y=0)P(X2|Y=0)P(Y=0):

由于9/20大于1/5,我们可以判断在打喷嚏但不头痛(X1=1,X2=1) 的条件下患感冒的概率要高于不患感冒的概率。
6.1.3 n维特征向量下的贝叶斯模型
我们可以在2个特征变量的基础上推广至n个特征变量 X1, X2, … , Xn,应用贝叶斯公式有:

同理因为分母相同,我们只需要关注分子

朴素贝叶斯模型假设给定目标值后特征之间相互独立,上式可以写作

其中P(X1|Y)、P(X2|Y)、P(Y)等数据都是已知的,由此可以根据上述公式计算在n个特征变量的不同取值的条件下,目标变量取某个值的概率,并且选择概率更高者对样本进行分类。
6.1.4 朴素贝叶斯模型简单代码演示
朴素贝叶斯模型(这里用的是高斯贝叶斯分类器)的引入方式如下所示:
from sklearn.naive_bayes import GaussianNB
1
1
在Jupyter Notebook编辑器中,在引入该库后,可以通过如下代码获取官方讲解内容:
GaussianNB?
1
1
朴素贝叶斯模型简单代码演示如下所示:
from sklearn.naive_bayes import GaussianNB
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [0, 0, 0, 1, 1]
model = GaussianNB()
model.fit(X, y)
print(model.predict([[5, 5]]))
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
其中X是特征变量,其共有2个特征;y是目标变量,共有两个类别:0和1;第5行引入模型;第6行通过fit()函数训练模型;最后1行通过predict()函数进行预测,预测结果如下:
[0]
1
1
6.2 案例实战 - 肿瘤预测模型(分类模型)
这一节将以一个医疗行业较为经典的肿瘤预测模型为例讲解如何在实战中应用朴素贝叶斯模型,我们将利用该模型来预测肿瘤为良性肿瘤还是恶性肿瘤。 参考技术A 在计算该概率之前,我们首先引入朴素贝叶斯模型的独立性假设:朴素贝叶斯模型中各特征之间相互独立,即,因此上式可以写作:

在独立性假设的条件下,我们可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下感冒的概率P(Y=1|X1,X2) ,即简化为计算 P(X1|Y=1)P(X2|Y=1)P(Y=1) (P(X1|Y)P(X2|Y)P(Y))的值:

同理可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下没有患感冒的概率 P(Y=0|X1,X2), 即简化为计算P(X1|Y=0)P(X2|Y=0)P(Y=0):

由于9/20大于1/5,我们可以判断在打喷嚏但不头痛(X1=1,X2=1) 的条件下患感冒的概率要高于不患感冒的概率。 参考技术B 13日在计算该概率之前,我们首先引入朴素贝叶斯模型的独立性假设:朴素贝叶斯模型中各特征之间相互独...
CSDN博客
概率生成模型 - 朴素贝叶斯(Naive Bayes) - 我对算法一无所知的博客 - CSDN...
2020年8月6日朴素贝叶斯是一种生成式模型,是在贝叶斯算法上做了简化,即假设定给定目标值的条件下,各个特征相互独立,这个简化使得各个特征对分类结果的影响较...
CSDN编程社区
朴素贝叶斯概率模型在使用前可以
朴素贝叶斯以及三种常见模型推导
在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。
朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝叶斯定理.这两个定义就是朴素贝叶斯的关键.接下来先了解一下这两个定义.
贝叶斯定理
贝叶斯定义是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关.
通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的,然而,这两者之间是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个.
直接给出公式:
其中,P(A|B)是指事件B发生的情况下事件A发生的概率(条件概率).在贝叶斯定理中,每个名词都有约定俗成的名称:
-
P(A|B)是已知B发生后A的条件概率,也由于得知B的取值而被称作 A的后验概率; -
P(A)是A的先验概率(或边缘概率).之所以称为"先验"是因为它不考虑任何B方面的因素; -
P(B|A)是已知A发生后B的条件概率,也由于得知A的取值而成称作 B的后验概率; -
P(B)是B的先验概率(或边缘概率).
按这些术语,贝叶斯定理可以表述为:
后验概率 = (似然性 * 先验概率)/标准化常量
也就是说,后验概率与先验概率和相似度的乘积成正比.
同时,分母P(B),可以根据全概率公式分解为:
条件独立性假设
如果P(X,Y|Z)=P(X|Z)P(Y|Z),或等价地P(X|Y,Z)=P(X|Z),则称事件X,Y对于给定事件Z是条件独立的,也就是说,当Z发生时,X发生与否与Y发生与否是无关的。
应用在自然语言处理中,就是说在文章类别确定的条件下,文章的各个特征(单词)在类别确定的条件下是独立的,并不相关,用通俗的话说,在文章类别确定的条件下,文章各个词之间出现与否没有相关性(事实上,并不成立).这是一个非常强的假设,但对问题的求解来说变得更加简单.
朴素贝叶斯的概率模型
设输入空间 为n为向量的集合,输出空间为类标记集合 .输入为特征向量 ,输出为类标记 . X是定义在输入空间X上的随机变量,Y是定义在输出空间Y上的随机变量.P(X,Y)是X和Y的联合概率分布.训练数据集:
由P(X,Y)独立同分布产生.因此朴素贝叶斯模型也是一个生成模型.
朴素贝叶斯算法通过训练集学习联合概率分布P(X,Y),具体地,学习先验概率分布以及条件概率分布.其中先验概率分布
条件概率分布
, k=1,2,...,K
通过两个概率得到联合概率分布P(X,Y) = P(X|Y)P(Y).
条件概率分布P(X=x|Y=c_k)有指数级数量的参数,其估计实际上不可行的.假设 有 个取值,j=1,2,...,n,Y有K个取值,那么参数个数为 .
指数级的参数估计事实上并不可行,因此朴素贝叶斯算法针对各个特征之间做了假设,也就是对条件概率分布作了条件独立性假设,这是一个很强的假设,通过这个假设,我们的参数求解变得可行,这也就是朴素贝叶斯的"朴素"的由来.这种情况下,我们同样假设 有 个取值,j=1,2,...,n,Y有K个取值,那么参数个数为 ,需要估计的参数量大大减少.条件独立性假设是
朴素贝叶斯算法分类时,对给定输入x,通过学习到的模型计算后验概率分布 ,将后验概率最大的类作为输入x的类输出.后验概率根据贝叶斯定理计算:
上面的公式是后验概率分布中的一项,由于对于相同输入x下不同类别的后验概率的分母都相同,而最终的类输出是后验概率分布中概率最大对应的类别,所以我们可以简化为只比较分子的大小就可以确定最终的结果,也就是说,最终类输出为:
.
如果我们对右边的乘积概率取log,连乘积就可以转换成为和,计算更简单(加法总比乘法简单),上诉公式存在一种变种:
.
同时这种形式,也可以看做是一种线性回归,权重系数为1.
介绍完,朴素贝叶斯的概率模型之后,我们目前的主要问题就集中在如何估计这个模型的 个参数:,估算出参数,我们就可以对输入向量x做预测.针对这些参数的求解方法不同,存在不同的朴素贝叶斯类型,具体介绍三种:伯努利朴素贝叶斯,多项式朴素贝叶斯和高斯朴素贝叶斯.不同类型的朴素贝叶斯对参数的求法不同,而根源在于对P条件概率(X=x|Y=c_k)的假设分布不同,也就是说在给定类别的情况下,对X假设的分布不同:伯努利假设是伯努利分布(其实应该是多变量伯努利分布),多项式假设是多项式分布,而高斯也就是假设是高斯分布(其实是多变量高斯分布).然后,我们细化到三种不同类型的朴素贝叶斯理论中.
Bernoulli Naive Bayes 伯努利朴素贝叶斯
伯努利朴素贝叶斯,其实应该叫"Multi-variate Naive Bayes",假设P(X=x|Y=c_k)是多变量伯努利分布.在了解多变量伯努利分布之前,先介绍一下什么是(单变量的)伯努利分布.
伯努利分布
伯努利分布,又叫做两点分布或0-1分布,是一个离散型概率分布.称随机变量X有伯努利分布,参数为p(0< p <1),它分别以概率p和1-p取1和0为值.
最简单的例子就是抛硬币,硬币结果为正或反.
幂次运算变成乘法运算,更简单.当x=1时,概率是P(X=1)=p,当x=0时,概率P(X=0)=1-p,这样就可以将两种情况合在一起.
了解了什么是伯努利分布之后,我们再看什么是多元伯努利分布(多变量 multi-variate Bernoulli).
多元伯努利分布
多元伯努利分布,通俗的讲就是同时进行多个不同的伯努利实验, ,其中x是一个向量, 也是一个向量,表示不同伯努利实验的参数.
伯努利多项式将文档的生成模型P(X=x|Y=c_k)假设服从为多元伯努利分布,由于我们之前做的特征独立性假设, 是一个向量形式,而其中 ,也就是说x向量是onehot形式的向量(每个维度值是0或1),表示这个维度的特征是否出现.特征集 有n个特征,特征集的维度决定了输入空间X的维度,而且特征集的维度可以对应到输入空间的各个维度上.
因为特征之间的独立性,所以多元伯努利变成各个伯努利分布的连乘积,需要注意的一点是因为是伯努利分布,0-1,特征出现有一个概率p,特征不出现也有一个概率1-p.最终模型的参数估计完成之后,对新样本进行预测时,如果某个特征不出现,需要乘上这个特征不出现的概率,不能只计算特征出现的概率!!!两个向量直接相乘,并不能得到最终的结果.
对应的伯努利朴素贝叶斯模型为:
为了简化运算,我们可以将分母忽略,虽然对应的结果不是真正的概率,但是相同样本的各个后验概率之间的大小关系保持不变,同时如果两边同时做log运算,后验概率之间的大小关系同样保持不变.因此,
.
了解了多元伯努利分布之后,接下来的工作就是对参数进行估计,计算 , .
参数估计
参数估计的过程也是朴素贝叶斯分类器学习的过程.而参数估计可以使用极大似然估计.先验概率 的极大似然估计是
, k=1,2,...,K
其中,I(x)是一个指示函数,如果x为真,I(x)结果为1,如果x为假,I(x)=0.用语言描述来说, 这个概率等于在N个样本的数据集中,类别为 的样本所占的比例.
条件概率 的极大似然估计是:
用语言描述来说,条件概率 等于在类别为 的样本集合(数据集的子集)中,第i个特征等于 的概率, 是0或1,而且 服从伯努利分布,所以只需要计算一个,比如P ,,因为两个概率和为1(这是同一个变量).
这些参数估计完之后,朴素贝叶斯就完成了学习过程,接下来就可以使用它去进行预测了(应用才是最终的目的).
0概率处理
由于 是伯努利分布,参数p在[0,1]之间,有可能存在 ,也就是存在0概率.
举例来说,在当前类别下的所有样本中特征i都出现了(=1),根据上面的条件概率极大似然估计,可以知道 ,那么对应的, ,那么当新样本来的时候,加入存在一条记录x,它很巧地没有第i个特征(这不巧了吗?不是),由于0概率的存在,那么使用上面的贝叶斯公式,就会出现属于某个列别的概率为0, .但这种情况是应该避免的,那么如何避免呢?
我们在对条件概率进行极大似然估计时,针对分子和分母做一些小变动,
其中, 表示第i个特征不同取值的个数,由于这里是one-hot,取值为2,所以 , 乘以 是保证 个不同取值对应的条件概率之和为1,不偏袒任意一种情况,一视同仁.
代码实现
To Be Continued.
数学推导---矩阵形式,批量计算,高效快捷.
Multinomial Naive Bayes 多项式朴素贝叶斯
多项式朴素贝叶斯,假设P(X=x|Y=c_k)是多项式分布.在了解多项式朴素贝叶斯之前,先介绍一下什么是多项式分布?
多项式分布
将伯努利分布的单变量扩展到d维向量 ,其中 ,且 ,假设 的概率是 ,并且 ,则将得到离散分布:
.
其中x, 都是d维向量形式.在此的基础上扩展二项分布到多项式分布(Multinomial distribution),该分布描述的是在n次独立实验中有 词 的概率,其密度函数可以表达为如下形式:
多项式分布的期望,方差如下:
多项式朴素贝叶斯
多项式分布应用到朴素贝叶斯上,对于文档分类问题来说,假设给定文档类型的基础上文档生成模型 是一个多项式分布.这样对应关系就是:
-
文档分类中的d维字典(d个特征)对应于多项式分布中的向量的d个维度; -
文档分类中,词 出现与否,对应于d维向量中 ,两种取值情况,且 ; -
文档分类中,词 出现的概率,对应于离散分布中 的概率是 ,并且 ; -
文档分类中,给定类别下,对应一次抽样结果x(d维向量)的概率为: ,因为如果一个词不出现,即 ,那么对应 ,所以 可以简写为 ; -
n次独立实验中有 词 的概率,对应到文档模型中特征i(第i个词)出现了 次,n次实验对应到文档模型中表示这篇文档的长度为n(一共有n个词),对应概率密度函数为:
多项式分布 | 文档模型 |
---|---|
d维向量 | d个维度,d个特征 |
第i个词出现与否 | |
的概率是 | 第i个词出现的概率 |
给定类别下,一次抽样结果的概率(一个词) | |
n次实验 | 对应长度为n的文档n次抽样结果 |
需要注意的是,应用在文本分类的多项式朴素贝叶斯模型之前,一般多项式条件概率如下:
我们的多项式朴素贝叶斯概率模型为:
这里为了方便,首先我们假设文章长度和文章的类别之间没有相关性(事实上也并不成立,比如说相对较长的邮件,相比垃圾邮件而言,正常邮件的概率更大),也就是说P(|x|)的分布与文章所属类别无关.另一方面,由于最终所属类别是后验概率最大对应的类别,所以,我们可以将文章长度P(|x|)建模的概率,忽略掉,就像我们之前忽略伯努利分布中的分母一样.
再者,为了更加方便,我们通常对两边取log运算,将幂次运算转换成线性运算:
我们也可以将文章长度阶乘省略,然后变成:
.
这样就变成线性运算,就和线性回归一样,运算高效而简单.
将文档模型对应到多项式分布上得到多项式朴素贝叶斯,在我们对其做出假设分布之后,剩下的工作就是对假设分布下每个类别下的d个条件概率以及先验分布进行估计.此外,还需要说明的一点是:多项式朴素贝叶斯模型采用词袋模型,每个 表示第i个特征出现的次数,也就是词频term-frequency,有时候也可以使用tf-idf作为值.
参数估计
参数估计的过程也是朴素贝叶斯分类器学习的过程.而参数估计可以使用极大似然估计.先验概率 的极大似然估计是
, k=1,2,...,K
其中,I(x)是一个指示函数,如果x为真,I(x)结果为1,如果x为假,I(x)=0.用语言描述来说, 这个概率等于在N个样本的数据集中,类别为 的样本所占的比例.
条件概率 的极大似然估计是:
用语言描述来说,条件概率 等于在类别为 的样本集合(数据集的子集)中,第t个特征出现的概率等于 类样本第t个特征出现的总次数(考虑词频,不再是0,1)占 类样本的总词数(文章长度之和,文章单词特征是固定的,考虑了词频)的比例.
为了方便理解,将 表示为第k类样本集合中第t个特征出现的总次数, 表示为在所有样本中第k类样本的总词数(第k类样本长度之和,考虑频数),简写成:
需要注意的是, ,意思是给定分类下,各个维度的概率之和为1,在文章分类中,就是给定文章分类的情况下,各个词出现的条件概率之和为1,和每个词出现多少词没有关系.
0概率处理
和伯努利朴素贝叶斯模型类似,有可能存在某一维度,数据集在这一维度上都是0,对应到文档分类上,就是这个词在所有文章中都没有出现过(词典选的不好,特征选择不好),这种情况就会出现0概率.所以我们需要对条件概率做一点小改动:
其中,d表示数据维度为d(有d个特征,每个特征都加 ,保证概率和为1, 需要乘d).当 时,叫做Laplace Smoonthing拉普拉斯平滑,当然 也可以小于1.
代码实现
To Be Continued
Gaussian Naive Bayes 高斯朴素贝叶斯
高斯朴素贝叶斯,假设P(X=x|Y=c_k)是多元高斯分布.在了解高斯朴素贝叶斯之前,先介绍一下什么是高斯分布,什么是多元高斯分布?
高斯分布
高斯分布又称正态分布,在实际应用中最为广泛。对于单变量 ,高斯分布的参数有两个,分别是均值 和方差 ,其概率密度函数为
多元高斯分布
其中, 是D维均值向量, 是DxD的协方差矩阵, 是 的行列式.多元高斯分布的期望是 ,方差是
特殊的,如果D个维度之间相互独立,那么多元高斯分布就可以表示成单元高斯分布概率密度函数的连乘积.
高斯朴素贝叶斯
高斯朴素贝叶斯模型是假设条件概率P(X=x|Y=c_k)是多元高斯分布,另一方面,由之前的特征的条件独立性假设,我们就可以通过对每个特征的条件概率建模,每个特征的条件概率 也服从高斯分布.
在 类下第i个词对应的高斯分布为:
其中, , 表示c类下第i个特征的均值和方差.
由于特征之间的独立性假设,我们可以得到条件概率:
一共有d个特征.
高斯朴素贝叶斯变成:
.
了解了多元高斯分布分布之后,接下来的工作就是对参数进行估计,计算 和 .
参数估计
先验概率和之前的估算方法相同,不再描述.主要是对高斯分布的均值和方差的估计,采用的方法仍然是极大似然估计.
均值的估计 是在样本类别 中,所有 的平均值;
方差的估计 为样本类别 中所有 的方差.
对于一个连续的样本值,带入高斯分布,就可以求出它的概率分布了.
所有参数估计完成之后,就可以计算给定样本的条件概率 ,进而可以计算 ,之后就可以确定样本类别,完成模型预测.
Reference
-
概率分布 -
sklearn贝叶斯文档 -
《统计学习方法》,李航 -
朴素贝叶斯理论推导与三种常见模型 -
朴素贝叶斯分类器 -
Spam Filtering with Naive Bayes – Which Naive Bayes? -
Text Classification using Naive Bayes -
A Comparison of Event Models for Naive Bayes Text Classification
以上是关于朴素贝叶斯概率模型在使用前可以进行特征融合吗的主要内容,如果未能解决你的问题,请参考以下文章