朴素贝叶斯也属于生成模型,由上篇文章可知,生成模型的一个好处就是在训练集不太大的情况下,抓到数据的特征,从而预测结果。前提是,特征向量要符合比较强的假设,比如多值正态分布。
一、朴素贝叶斯模型能够处理的问题
1.1 特征向量是离散值的请况:
在GDA(高斯判别模型)中,我们要求特征向量x是连续实数向量。如果x是离散值的话,可以考虑采用朴素贝叶斯的分类方法。
1.2 文本分类(比如,分类垃圾邮件和正常邮件)
二、朴素贝叶斯模型在文本分类中的应用
参考Jerrylead第三小节。
2.1 为什么不能采用判别模型
假设采用最简单的特征描述方法,首先找一部英语词典,将里面的单词全部列出来。然后将每封邮件表示成一个向量,向量中每一维都是字典中的一个词的0/1值,1表示该词在邮件中出现,0表示未出现。
比如一封邮件中出现了“a”和“buy”,没有出现“aardvark”、“aardwolf”和“zygmurgy”,那么可以形式化表示为:
假设字典中总共有5000个词,那么x是5000维的。这时候如果要建立多项式分布模型(二项分布的扩展)。
多项式分布(multinomial distribution)
某随机实验如果有k个可能结局A1,A2,…,Ak,它们的概率分布分别是p1,p2,…,pk,那么在N次采样的总结果中,A1出现n1次,A2出现n2次,…,Ak出现nk次的这种事件的出现概率P有下面公式:(Xi代表出现ni次)
对应到上面的问题上来,把每封邮件当做一次随机试验,那么结果的可能性有25000 种。意味着pi有25000个,参数太多,不可能用来建模。
从这也可以看出,判别式模型(求条件概率p(y|x)也并不合适)有时也不适合所有问题,p(y|x)此时是求不出来的。
2.2为什么能用生成模型(用朴素贝叶斯模型的合理性)
用朴素贝叶斯模型, 在满足假设:条件独立的情况下,根据下面的公式,每个p(xi |y)是可以求出来的,而每个p(y)也是可以求出来的。
再由上可知
求参数使p(xi |y)*p(y)最大其实等价于求参数使p(y|x)最大了。
于是用朴素贝叶斯模型来进行分类是合理的。
2.3 利用上篇‘如何学习生成模型’来讲解朴素贝叶斯模型
2.3.1 朴素贝叶斯模型的假设
假设x中的特征是条件独立的。
这个称作朴素贝叶斯假设。如果一封邮件是垃圾邮件(y=1),且这封邮件出现词“buy”与这封邮件是否出现“price”无关,那么“buy”和“price”之间是条件独立的。
参考讲义,可以得到已知y的条件下,特征X为(x1,x2,...x50000)的概率
从这里也能发现朴素贝叶斯假设是约束性很强的假设,“buy”从通常上讲与“price”是有关系,我们这里假设的是条件独立。(注意条件独立和独立是不一样的)
2.3.2 建立朴素贝叶斯的模型
后验概率的模型:
先验概率的模型:
因为假设了是条件独立的,所以直接选择上面三个 φ作为参数,是可以直求得的。
2.3.3 建立目标函数
选择以上三个作为参数,想要学得参数再训练数据上概率积最大, 得到最大似然估计
上式中,右侧
p(x,y)
=p(x,y|φi|y=0,φi|y=1,φy)
=p(x|y;φi|y=0,φi|y=1)p(y;φy)
可知,这三个参数能够限制,也能够求出p(x,y)。就相当于线性回归中的θ,也相当于高斯判别分析(GDA)中的均值和方差。
比如p(x=1,y=1)可由φi|y=1,φy求出。
求解得:
最后一个式子是表示y=1的样本数占全部样本数的比例,前两个表示在y=1或0的样本中,特征Xj=1的比例。
2.3.4利用模型预测的解释
- 1、 再具体表达的话就是,经过训练以后得到参数,对于将要判断的样例第i个邮件,具有50000维的向量
- 2、计算p(x,y=1)=p(x|y=1)p(y=1)
又因为特征X服从条件独立的假设,也就是计算50000个p(xi=1|y=1)的乘积以后再乘以p(y=1)即可。
简单理解就是,在之前训练的过程中,y=1的情况下,此时xi=1的情况越多,则概率越大。
三、拉普拉斯平滑
解决了,朴素贝叶斯方法对于 数据稀疏问题过于敏感的缺点。看讲义。。
在每个观察值对应的出现次数k都事先加 1,保证分子不为零。
四、朴素贝叶斯的优缺点
朴素贝叶斯属于生成式模型,在特征符合朴素贝叶斯假设的条件下,朴素贝叶斯分类器的收敛速度将快于判别模型,如逻辑回归,所以你只需要较少的训练数据即可。
优点:
对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;
对缺失数据不太敏感,算法也比较简单,常用于文本分类。缺点:
需要计算先验概率;
分类决策存在错误率;
对输入数据的表达形式很敏感。