朴素贝叶斯法是以概率的角度来进行分类的。就是求新输入的那个实例量x在哪个分类Y的概率大,如果在Y=c1类里面的概率大,则x属于c1类。换句话说就是在分类是c1的情况(条件)下,这个实例x满足它各个特征的概率最大,即P(X=x|Y=c1)的概率最大。
|方法 |适用问题 | 模型特点 |模型类别|学习策略|学习的损失函数|学习算法|
|:--- | ---------: | :-------: | :---:|:----------:|
|朴素贝叶斯法|多类分类|特征与类别的联合概率分布,条件独立假设|生成模型|极大似然估计,极大后验概率估计|对数似然损失|概率计算公式,EM算法|
先看看贝叶斯公式:
在机器学习的视角中,比如分类问题,如想看看具有某特征的东西属于某一类,设X为具有某特征;Y为属于某类;那么这时的贝叶斯公式表示就是:
也就是说贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成了计算“属于某类的条件下具有某特征”的概率。
比较常用的就是用在文本的分类里,用一个例子来介绍的话,就比如给一句话,想要看看这句话是偏积极还是偏消极的,如下面一句话:
我今天真的是蛮高兴的
如何用贝叶斯来判断呢?这时候,我们其实要求的就是P(“积极”|“我今天真的是蛮高兴的”)的概率。
那么如何求P呢?由于一句话太长了,我们通常先将它进行分词操作,分词后用就变成了这样:
用上贝叶斯公式,就是求:
那里面的P("积极")就是其先验概率。
但这样还是不好算,尤其是那前面一串词在一起的联合概率。因此在这里就有个前提假设:“朴素”的认为每个词为条件独立的。这样的话,条件联合概率就可以化为:
这就是朴素贝叶斯的思想。
为什么叫朴素呢?因为这样独立假设后,每个词就相当于是单独的了,相互之间是没有联系的(这里也是词袋模型的特点,将分词后的词一股脑的装进袋里,那些词之间有没有什么联系,我们并不考虑)。因为有乘法交换律嘛。这样“我是中国人”和“中国人是我”的概率就会是一样的,把它们看成了同一个句子,这从逻辑上并不太合理。
虽然朴素贝叶斯像如上的分类并不考虑词间的顺序等因素,用的就是假设条件概率独立。但从效果上来看还是比较好的,比如《黑客与画家》中就举了个例子,朴素贝叶斯在垃圾邮件识别中:
1000封垃圾邮件中能够被过滤掉995封,并且没有一个误判。
------ By 《黑客与画家》
朴素贝叶斯的三种模型
朴素贝叶斯有三种模型,这些其实就是根据求概率时的不同来规定的。比如一封垃圾邮件中有如下一句话:
代开发票、增值税发票、正规发票。
当用朴素贝叶斯公式的时候,概率就是:P(“代开”,“发票”,“增值税”,“发票”,“正规”,“发票”|S=“垃圾邮件”)
这时候,我们发现这些词里面有多个重复出现的词语,我们需不需要重复算呢?有几种方法来选择处理这个概率,下面来看看:
1.就按平常的方法来,直接将联合概率拆开,重复的词语就视为出现多次,像变成这样:
P(“代开”|S) P(“发票”|S) P(“增值税”|S) P(“发票”|S) P(“正规”|S) P(“发票”|S)
这样统计和判断时,“发票”出现了三次就记三次。我们关注重复次数,就是多项式模型。
2.另一种是不用考虑词语是否重复,一律按照一次来算,这样上面的概率就写为:
*P(“代开”|S) P(“发票”|S) P(“增值税”|S) P(“正规”|S) *
这种就叫做伯努利模型,这样做的话能够简化算法。不过由于每个文档中词只统计一次,有一定的词频损失。
3.如果将上面两种结合起来用,就是混合模型。在计算句子概率的时候,不考虑重复词语出现的次数;但在统计计算词语的概率P时,考虑重复词语的出现次数。
平滑
下面来看看平滑技术。
由于我们前面在算概率的时候,容易出现概率为0的值,这样的话将会导致最后的结果也为0,常常会引起错误。比如上面的话:
如果在给出的训练集中,“今天”这个词从来没有出现过,这时候P("今天"|"积极")这个概率就等于0,其结果将导致整个联合概率都为0了。这当然是不允许的。因此我们需要进行处理一下,这个处理就叫做平滑。
一般来说,我们进行的平滑可以是拉普拉斯平滑:
也就是像上面一样,假设有N篇文档,在每个文档的词频上都加上一个1,这样就不会出现值为0的结果了。
其实如果不是加1,而是一个整数λ>=0,被称为贝叶斯估计。拉普拉斯平滑就是λ=1时的名称了。
朴素贝叶斯是一个比较简单的算法,整个流程就如上所述。最后来看看《统计学习方法》书中给出的朴素贝叶斯算法:
看着贝叶斯公式来对应:
其实要求的就是P(Y)先验概率和P(X|Y)条件概率,这些都是统计求频率来的。
还可以看到分母并没有用,因为:
分母对于所有分类来说都是不变的,因此可以直接忽略。
最后,书上还有个朴素贝叶斯具体的例子可以看一下: