朴素贝叶斯理论进阶(1)——cs229(4、5)笔记

标签: 朴素贝叶斯

朴素贝叶斯分类器是生成式模型的代表,同时朴素贝叶斯和逻辑回归都是线性分类器,两者可以组成了一组生成-判别对。为了更好的了解朴素贝叶斯,又倒回去看了Andrew ng的机器学习视频第4讲和第5讲,并做了如下笔记。以下知识基本上都是视频中的内容,没有什么自己的东西,如有对视频理解不到位的地方,欢迎指正。

1.生成式方法简介

分类算法要解决的问题是给定一个如下图训练集合,如果对它运行逻辑回归这样的算法,它会观察这组数据,并尝试找到一条线能讲图中的“X”和“O”尽量分开,新的样本过来,只需要把新样本的特征拿到这条直线的公式上去计算,看得到的值是在等式左边还是右边便可分类了。
这里写图片描述
除了像逻辑回归这种直接计算这条的直线,另外一种方法是遍历训练集合,查看其中所有“X”样本,基于这些样本直接对“X”的特征进行建模,然后再找到所有“O”的样本,对“O”的特征进行建模,当对新的样本进行分类时,只需要拿特征分别匹配“X”的模型和“O”的模型,看哪一个模型的匹配度更高,将新样本定为更高的那一类。
直接对分类模型建模,这是判别式学习方法;对各类型分别建模,这是生成式学习方法。

判别式方法:直接学习条件似然P(y|x);
生成式方法:对联合似然P(x,y)进行建模,而p(x,y)又转化为p(x|y)p(y),实际上主要是对p(x|y)建模,给定所属类的情况下,计算某种特征的概率,p(y)计算相对简单。
以上,x表示feature,y为class。

2.多维高斯分布

视频讲了两种生成式学习方法,第一种是高斯判别分析(GDA),在这个模型中,假设p(x|y)服从多维高斯分布。
通常正态分布指单变量正态分布,而多维正态分布的u从单数转成了这里写图片描述,方差变成了协方差矩阵这里写图片描述协方差,协方差的计算这里写图片描述,分布表示为N(μ,∑)。其概率密度表示为
这里写图片描述

2维高斯分布的密度图如下:
这里写图片描述
上面3个图中,均值u为0向量,协方差矩阵为对角矩阵,最左边图的∑为单位矩阵,它是标准2维高斯分布;中间是∑对角线上的值同时变为0.6;最右边,∑对角线上的值同时变为2.和单变量高斯分布一样,协方差越大,分布散的越开,协方差越小,分布越集中。
这里写图片描述
这3个图中,均值依然为0向量,但协方差矩阵不是对角矩阵,他们的协方差矩阵分别是:
这里写图片描述
随着负对角线上的值越来越大,分布的倾斜的角度也越来越大。
这里写图片描述
以上3图的协方差矩阵为单位矩阵,但期望不再是0向量,期望向量如下:
这里写图片描述

和单变量高斯分布一样,期望决定中心点的位置,协方差决定分布的形状。

3. 高斯判别分析

高斯判别分析是指x|y=i服从高斯分布。
根据贝叶斯规则
这里写图片描述
对于所有类型,p(x)是一样的,会被似然函数忽略掉,y是二值的,自然服从伯努利分布,x|y=i服从高斯分布:
这里写图片描述
对数似然函数:
这里写图片描述
参数为这里写图片描述、∑。通过样本统计可以计算出以上参数:
这里写图片描述
两个模型计算出来后,预测通过最大似然来预测新的样本的类别:
这里写图片描述
对于2分类来说,分别计算两个类别的p(x|y)p(y),更大的一个为该样本的类别。

4.GDA和逻辑回归

当测试样本的特征从class=0的逐渐滑动到class=1中,根据GDA计算出的p(y=1|x)的滑动曲线是这样的:
这里写图片描述
通过GDA推导出来
这里写图片描述
这就是逻辑回归y=1的概率函数。
也就是说,当x|y服从高斯分布,那么推导出来的y|x是服从逻辑回归的。但是,形式是逻辑回归的形式,参数值却和直接逻辑回归学习到的参数不同。
在x|y服从高斯分布的假设条件上,可以推出y|x的后验分布是一个逻辑回归函数,但p(y|x)是逻辑回归函数不能推出x|y服从高斯分布。因为,只要x|y服从指数分布,都能推出p(y|x)是逻辑回归函数。
x|y服从高斯分布的假设比y|x服从逻辑回归分布的假设更强,前者可以推出后者,后者却不能推出前者。当数据集x|y确实服从高斯分布,即便是大概服从,那么GDA会优于LR,因为GDA可以更多的利用数据中的信息,但是,如果数据的分布不那么确定,那么LR的表现会更好,因为它更直接。如果假设数据服从高斯分布,但实际上它服从泊松分布,那GDA效果会不好,而LR却没有影响,数据依然可以推出LR。
事实证明,使用生成式学习方法的好处——它需要更少的数据就能达到较好的效果。数据不需要精准的服从高斯分布,只要近似就可以。LR的假设更少,模型对假设上也更强壮,它的鲁棒性更好,但为了拟合模型,需要更多的数据。

5. 朴素贝叶斯

5.1 基本原理
朴素贝叶斯是另一种生成式模型,基本的理论在前一篇已经写过了。
视频中以垃圾邮件分类为例,这是文本二分类的应用。
文本分类涉及到的最基本要素——词。假设以一本词典作为文本的词典,词典包含5000个词,首先,我们遍历每一封邮件,看词典中哪些词在邮件中出现,出现则为1,否则为0.那么每一封邮件的特征集合是2000维的,其中邮件中出现过的词值为1.例如下面这个样本:
这里写图片描述
邮件被映射成了一个5000维的向量。如果按照GDA的方式,需要计算模型p(x|y),其中x是一个5000维的向量,对于二项分类,参数会有这里写图片描述,看起来好可怕。
如果做朴素贝叶斯假设,即5000个词出现在邮件中是相互独立的,前n个词对预测后一个词完全没有影响(无论是中文还是英文,这基本不可能成立)。那么
这里写图片描述
参数变为10000+个,参数估计:
这里写图片描述
第一个公式分子的含义是遍历整个数据集中所有的垃圾邮件中,计算垃圾邮件中出现词j的次数;分母是垃圾邮件的数量。

联合似然函数:
这里写图片描述

由于是二分类,可以当通过最大似然来预测,在ng的另一篇论文中也讲到可以通过两个类别的似然函数的比值的对数是否大于0来判定是否为垃圾邮件。

朴素贝叶斯并没有像GDA那样用到模型假设,只是用了数据特性假设,假设数据各维间相互独立。

5.2 拉普拉斯平滑
如上垃圾邮件分类问题。加入某一封新的邮件中出现了一个在以前的训练样本邮件中没有出现过的词,加入这个词在词典中的位置是3500,那么
这里写图片描述
这样一来,预测是垃圾邮件的概率
这里写图片描述
不是垃圾邮件的概率也是0/0。预测根本没有办法进行。
为了化解这种尴尬,于是将每个词在垃圾邮件中出现的次数上加一个正的常数,无论这个词实际出现的次数为多少,都会额外加上这个正的常数,通常这个常数取1.对于非垃圾邮件,处理是一样的。
上例中的各参数就变成了
这里写图片描述
这里写图片描述
广泛来说,假设数据有k个类别,给每一维特征在类别i中出现的概率上加一个极小的正的常数,保证p(x=i|y=j)永远为正,那么每维特征在所有别类中加上的值为k*i,这样相加之后每一维特征的这里写图片描述 依然成立。

实际分类问题中,这里写图片描述通常不容易为0,如果它为0了,那么这一类别就没有存在的意义了。因此,拉普拉斯平滑通常只需要对p(x|y)实施。

文本分类事件模型

上面的垃圾邮件分类问题只考虑词典中的每一个词是否在垃圾邮件中出现,出现则该维特征为1,否则,为0,这种方式的朴素贝叶斯被称为多元伯努利事件模型。
而实际上某些敏感词在垃圾邮件中出现的次数很重要,这就涉及另一种模型——多项事件模型。为了描述这种模型,在前面提到的邮件数据集中用另一种不同的标记法,第j个词在该邮件中的取值范围不再是{0,1},而是,{1, …. ,|V|},其中|V|为词典的词总量。一封邮件由向量这里写图片描述 表示,其中n为邮件的词数量,每一封邮件的特征向量维度不同。邮件“A NIPS…”,x1=1, x2=3500(按照前面的,A为词典中的第一个词,NIPS为第3500个词。)。
多项事件模型中,假设一封邮件的生成过程是随机的。也就是说邮件“A NIPS … ”中第一个词A和第二个词NIPS是完全独立的,后面各词也是完全独立的。依然采用这里写图片描述 判别邮件是否为垃圾邮件,但是计算p(x|y)的算法不同了,前面的例子中,每一维特征是服从伯努利分布的,而多项式事件模型中,每维特征是服从多项分布的。
这里加一点题外话,sklearn提供的NB模型中,有伯努利NB、多项NB、高斯NB,不同的NB应该就在于特征服从的分布吧。
在求参数时,并不会考虑词出现的位置对参数没有影响,而更注重的是词在邮件中出现的次数,虽然特征这里写图片描述 表示的是邮件第一个词到第n个词在词典中的位置,但实际计算中,第1个词和第n个词是毫无差别的。
词典依然有5000个词,每封邮件的词长度为这里写图片描述,对于m封邮件的样本集表示为
这里写图片描述
其中
这里写图片描述
似然函数如下:
这里写图片描述
最大化似然函数的各参数如下:
这里写图片描述
从参数估计中可以看出,这里写图片描述 的分子表示对词k在样本集中所有垃圾邮件中出现的总次数,参数个数和前面例子中的参数个数相同。
考虑拉普拉斯平滑,由于k有5000个取值,
这里写图片描述

朴素贝叶斯处理文本看起来有点简单粗暴,但是它的效果貌似挺好的,而且训练速度很快。按照Andrew ng的说法,这种方式类似于一元语法,二元语法或者三元语法对文本分类可能会有改善,但改善是很微小的。

版权声明:本文为juanjuan1314原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/juanjuan1314/article/details/78276532