朴素贝叶斯以及三种常见模型推导
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素贝叶斯以及三种常见模型推导相关的知识,希望对你有一定的参考价值。
参考技术A朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝叶斯定理.这两个定义就是朴素贝叶斯的关键.接下来先了解一下这两个定义.
贝叶斯定义是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关.
通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的,然而,这两者之间是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个.
直接给出公式:
其中,P(A|B)是指事件B发生的情况下事件A发生的概率(条件概率).在贝叶斯定理中,每个名词都有约定俗成的名称:
按这些术语,贝叶斯定理可以表述为:
后验概率 = (似然性 * 先验概率)/标准化常量
也就是说,后验概率与先验概率和相似度的乘积成正比.
同时,分母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假设的分布不同:伯努利假设是伯努利分布(其实应该是多变量伯努利分布),多项式假设是多项式分布,而高斯也就是假设是高斯分布(其实是多变量高斯分布).然后,我们细化到三种不同类型的朴素贝叶斯理论中.
伯努利朴素贝叶斯,其实应该叫"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(这是 同一个变量 ).
这些参数估计完之后,朴素贝叶斯就完成了学习过程,接下来就可以使用它去进行预测了(应用才是最终的目的).
由于 是伯努利分布,参数p在[0,1]之间,有可能存在 ,也就是存在0概率.
举例来说,在当前类别下的所有样本中特征i都出现了(=1),根据上面的条件概率极大似然估计,可以知道 ,那么对应的, ,那么当新样本来的时候,加入存在一条记录x,它很巧地没有第i个特征(这不巧了吗?不是),由于0概率的存在,那么使用上面的贝叶斯公式,就会出现属于某个列别的概率为0, .但这种情况是应该避免的,那么如何避免呢?
我们在对条件概率进行极大似然估计时,针对分子和分母做一些小变动,
其中, 表示第i个特征不同取值的个数,由于这里是one-hot,取值为2,所以 , 乘以 是保证 个不同取值对应的条件概率之和为1,不偏袒任意一种情况,一视同仁.
To Be Continued.
多项式朴素贝叶斯,假设P(X=x|Y=c_k)是多项式分布.在了解多项式朴素贝叶斯之前,先介绍一下什么是多项式分布?
将伯努利分布的单变量扩展到d维向量 ,其中 ,且 ,假设 的概率是 ,并且 ,则将得到离散分布:
.
其中x, 都是d维向量形式.在此的基础上扩展二项分布到多项式分布(Multinomial distribution),该分布描述的是在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类样本长度之和,考虑频数),简写成:
和伯努利朴素贝叶斯模型类似,有可能存在某一维度,数据集在这一维度上都是0,对应到文档分类上,就是这个词在所有文章中都没有出现过(词典选的不好,特征选择不好),这种情况就会出现0概率.所以我们需要对条件概率做一点小改动:
其中,d表示数据维度为d(有d个特征,每个特征都加 ,保证概率和为1, 需要乘d).当 时,叫做Laplace Smoonthing拉普拉斯平滑,当然 也可以小于1.
To Be Continued
高斯朴素贝叶斯,假设P(X=x|Y=c_k)是多元高斯分布.在了解高斯朴素贝叶斯之前,先介绍一下什么是高斯分布,什么是多元高斯分布?
高斯分布又称正态分布,在实际应用中最为广泛。对于单变量 ,高斯分布的参数有两个,分别是均值 和方差 ,其概率密度函数为
其中, 是D维均值向量, 是DxD的协方差矩阵, 是 的行列式.多元高斯分布的期望是 ,方差是
特殊的, 如果D个维度之间相互独立,那么多元高斯分布就可以表示成单元高斯分布概率密度函数的连乘积 .
高斯朴素贝叶斯模型是假设条件概率P(X=x|Y=c_k)是多元高斯分布,另一方面,由之前的特征的条件独立性假设,我们就可以通过对每个特征的条件概率建模, 每个特征的条件概率 也服从高斯分布 .
在 类下第i个词对应的高斯分布为:
其中, , 表示c类下第i个特征的均值和方差.
由于特征之间的独立性假设,我们可以得到条件概率:
一共有d个特征.
高斯朴素贝叶斯变成:
.
了解了多元高斯分布分布之后,接下来的工作就是对参数进行估计,计算 和 .
先验概率和之前的估算方法相同,不再描述.主要是对高斯分布的均值和方差的估计,采用的方法仍然是极大似然估计.
均值的估计 是在样本类别 中,所有 的平均值;
方差的估计 为样本类别 中所有 的方差.
对于一个连续的样本值,带入高斯分布,就可以求出它的概率分布了.
所有参数估计完成之后,就可以计算给定样本的条件概率 ,进而可以计算 ,之后就可以确定样本类别,完成模型预测.
朴素贝叶斯算法理论推导及其变种算法
1. 朴素贝叶斯简介
朴素贝叶斯是机器学习领域中比较常见的一个分类算法,该算法以贝叶斯定理为基础,推导过程不复杂,但却能够得到不错的分类效果,因此在机器学习领域使用比较广泛。
2. 机器学习中的基本概念
机器学习分类:
监督学习(Supervised Learning):对有标记的训练样本学习的过程,并且不断调整参数从而获取最佳训练模型,朴素贝叶斯就是监督学习。
无监督学习(Non- Supervised Learning):通过对无标记的样本数据进行学习,人们不关心数据的具体标签,只关心这些数据所表现出的规律。例如KMeans算法。
半监督学习(Semi-Supervised Learning):通过少量的标记数据和大量的无标记数据,通过不断地训练从而获取分类器的过程。在现实生活中大量的有标记数据难以获取,因此半监督学习具有非常大的实用价值。
特征(feature)和标签(label):
在监督学习中训练模型所需要的都是有标记的样本数据,那么样本的标记就是标签。特征就是一个样本数据中影响样本分类标签的因素,例如,一个水果是否是苹果,那么颜色、大小、重量这些都会影响,因此这些因素都可以认为是特征。
红小轻 | 苹果
绿小轻 | 苹果
青小轻 | 苹果
绿大重 | 西瓜
绿小重 | 西瓜
3. 机器学习的实现流程
不同于传统的开发,机器学习开发中前期需要大量的准备工作以及数据调研过程,机器学习的主要工作就是将机器学习算法转化为一个可实际运行的应用程序。要完成这个目标就必须要对算法有深入的了解。大致流程如下:
1. 获取数据:爬虫、设备监测、公开数据集
2. 分析数据:数据清洗、非空、去重;对数据的特点进行分析,离散型、连续型,提取所需要的特征等。
3. 训练算法:理论推导与代码实现
4. 测试算法:用测试集合评估模型,评估指标准确率、精确率、召回率、F1值
5. 使用算法:模型保存,遇到新的数据可直接使用已经训练好的模型模型
4. 算法的优缺点
该算法是以贝叶斯原理为基础,并且假设各个特征之间是独立的,不用考虑特征之间的关联性,因此计算上得到简化,并且易于理解。
但同时由于没考虑特征之间的关联性,因此对于特征之间关联性比较大的场景中,在计算的准确性略微欠缺。
朴素贝叶斯算法的基本思想:对于给出的待分类项,根据数据的特征计算各个类别出现的概率,哪个类别的概率最大,就认为此待分类项属于哪个类别
5. 理论推导
朴素贝叶斯以贝叶斯定理为基础,贝叶斯定理的公式如下所示:
对于该公式可以认为Y是类别,X是特征。该公式还有一种更为通俗的理解:
即:
把朴素贝叶斯的思想转换为目标公式如下:
对于上式,在给定数据集的情况下,就是已知该数据的特征(X1,X2)
那么该样本属于Y1的概率:
那么该样本属于Y2的概率:
若Y1 >= Y2那么该样本属于1类,若Y2 > Y1那么该样本属于2类。
另外可以发现一个样本属于1或者属于2只与分子有关,对于同一份训练集分母都是相同的。因此目标公式可以表示为如下形式:
因为朴素贝叶斯不考虑特征之间的关联性,所以
上式中只有两个参数是未知的,只需要求出先验概率和每个特征的条件概率就能够得到每个样本属于每个类别的概率。
是某个类别的先验概率,也就是该类的样本在训练集中的比例;
是某个类别中,某个特征Xn的条件概率;
由于实际数据中每个样本都是有多个特征,因此多个条件概率连乘会导致数据下溢,并且我们并不关心最后概率结果的具体值,只关最后概率之间的大小,因此为了防止出现下溢的情况,通常会取对数。由此得到朴素贝叶斯最终的概率公式
得出了最终的公式,但是还不够,对于我们所获取的训练样本,需要给出训练集的分布情况,这就引申出来朴素贝叶斯的两个变种算法。这里主要讲最常用的两种:BernoulliNB、MultinomialNB。Spark的机器学习包也是只实现了这两种贝叶斯算法。
6. 两个变种算法
6.1 BernoulliNB算法
BernoulliNB是对按多元伯努利分布的数据,实现朴素贝叶斯训练和分类的算法。
首先伯努利分布就是0 1分布,最经典的案例就是扔硬币,一个硬币要么是1,要么是0。那么对于朴素贝叶斯分类来讲,因为面对的不只是一个特征,所以在现实中的算法应用中应该是使用的多元伯努利分布。
参数估计:
首先针对先验概率,每个类别的样本出现的次数
其中I(x)是一个指示函数,判断一个训练样本是不是属于某一个类别,若属于那么I(x)=1否则I(x)=0。
接下来求解条件概率
分母是指示函数,指定哪一个样本属于,分子也是指示函数指定样本中那些特征是。
这里面有一个问题,例如对于如下特征
特征1 |
特征2 |
标签 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
对于特征1,,,
但是对于特征2, ,在求
那么在
就会造成整体的概率值是0,这种情况是就是0概率问题,解决该问题可以对分子和分母做一些改动
公式中的2是因为伯努利分布每个特征只能取两个值,是调节参数,
当α=1时为拉普拉斯(Laplace)平滑,α<1时为李德斯通(Lidstone)平滑。
但由于对于伯努利分布来讲不仅要考虑出现的特征,对于不出现的特征也是需要考虑的,特征出现那么概率是P,特征不出现那么概率是1-P。
所以基于伯努利分布的朴素贝叶斯的概率公式是,也就是需要加上那些不出现的特征的概率:
6.2 MultinomialNB算法
MultinomialNB实现了对多项式分布数据的朴素贝叶斯算法,是文本分类中使用的两种经典的朴素贝叶斯变种算法之一。
因为对于某一个特征,很有可能不止出现一次,比如在文本分类中,一个垃圾短信出现多次“贷款”的概率比较高,这种情况就不是伯努利分布能够解决的,因此伯努利分布只能描述出现与否,出现的次数是无法衡量的。因此出现了基于多项式朴素贝叶斯。通过上述公式推导,我们能够得出朴素贝叶斯算法主要就是求出先验概率和条件概率。首先给出基于多项式模型条件概率的计算公式:
跟伯努利模型的先验概率公式是一样的。接下来求解条件概率,
是某个特征具体的值,同样的多项式分布也会面临0概率问题
d表示特征的个数,表示调节参数,
当α=1时为拉普拉斯(Laplace)平滑,α<1时为李德斯通(Lidstone)平滑。
以上是关于朴素贝叶斯以及三种常见模型推导的主要内容,如果未能解决你的问题,请参考以下文章