美文网首页机器学习程序员今日看点
机器学习笔记--朴素贝叶斯

机器学习笔记--朴素贝叶斯

作者: 七号萝卜 | 来源:发表于2017-03-27 10:58 被阅读383次

    朴素贝叶斯法是以概率的角度来进行分类的。就是求新输入的那个实例量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)条件概率,这些都是统计求频率来的。

    还可以看到分母并没有用,因为:

    分母对于所有分类来说都是不变的,因此可以直接忽略。

    最后,书上还有个朴素贝叶斯具体的例子可以看一下:

    相关文章

      网友评论

      本文标题:机器学习笔记--朴素贝叶斯

      本文链接:https://www.haomeiwen.com/subject/imokmttx.html