贝叶斯分类器

贝叶斯分类器


贝叶斯公式

公式:

P(Y|X)=P(X|Y)P(Y)P(X)

由联合概率公式推导而来:
- P(Y,X)=P(Y|X)P(X)=P(X|Y)P(Y)
- P(Y)叫先验概率,P(Y|X)叫做后验概率,P(Y,X)叫做联合概率

用机器学习视角理解:

在机器学习的视角下,我们把X理解为“具有某特征”,把Y理解为“类别标签”

P(""|"")=P(""|"")P("")P("")

贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,属于有监督学习。

朴素贝叶斯(naive bayes)

引入一个很朴素得的近似:

P(()|S)=P(|S)×P(|S)×P(|S)×P(|S)×P(|S)×P(|S)×P(|S)×P(|S)×P(|S)×P(|S)

传说中的条件独立假设:

P(x|c)=P(x1,x2,,xn|c)=P(x1|S)×P(x2|S)×P(xn|S)

  • naïve bayes引入的是条件独立性假设,而非独立性假设(独立性假设不包含后面条件部分,而是p(x)=p(x1×p(x2)p(xn);

  • S是spam的缩写,上例是判定是否是垃圾邮件的实例;

  • 朴素贝叶斯引入的是条件独立假设;

比较后验概率大小

C=P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)×P()

C¯=P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)P(|S)×P()

  • 每一项都很好求:只需要分别统计各类邮件中该关键词出现的概率就可以了,比如:

P(""|S)=

  • 如上例,若要利用bayes 分类器判定邮件是不是垃圾邮件,可以利用朴素贝叶斯方法,其中一个trick就是直接计算P(|X)P(|X),若结果大于1,则判定该邮件为垃圾邮件,这么做的好处就是可以直接约去朴素贝叶斯的分母项。

贝叶斯分类器

贝叶斯分类器

注:在naïve bayes计算的结果就是“武松打死老虎”与“老虎打死武松”概率相同。

贝叶斯分类器

朴素贝叶斯的三种模型

多项式模型

多项式模型:训练模型时候,重复的词语视为出现多次;测试时候,重复的词语也视为出现多次;

贝叶斯分类器

伯努利模型

伯努利模型:在训练与测试时候都是将重复出现的词语视为出现1次;

贝叶斯分类器

混合模型

混合模型:训练模型时候考虑重复出现单词个数;测试时,不考虑重复出现单词个数;

贝叶斯分类器

贝叶斯分类器

  • 实践中发现一般混合模型效果更好一些;

注:bayes模型的训练过程就是统计上述等式中各个后验概率的大小(生成模型与判定模型不一样,不是拿数据直接拟合最终结果),即做一套统计,之后就可以得到bayes 分类器,就可以做预测了,之所以朴素贝叶斯模型只需要做统计就可以做预测的原因见下文。

平滑技术

平滑技术旨在解决在测试样本中遇见训练样本中未出现过的特征的样本预测问题;

贝叶斯分类器

贝叶斯分类器

贝叶斯分类器

  • 对于伯努利模型来说,采用加一平滑(即拉普拉斯平滑),当测试样本中出现“训练集中没有的特征时”,分子分母同时加一或者分子加一分母加二;
    只是单纯在测试集中出现训练集未出现特征时候用;

  • 对于多项式模型来说,就是直接分子加一,分母加训练集个数;也就是对所有的特征统计都需要做平滑。

示例:

如果训练集是(a,b,c,a,a),(a,b,b),(b,c,c),测试集是(d,a,c)
则根据上述平滑技术,针对多项式平滑,则有

P(d)=0+111+4

P(a)=4+111+4

P(b)=4+111+4

P(c)=3+111+4

  • 其中上述P(d)计算中,分子是 0+1,分母中11是训练集所有个数,4是(针对训练集+测试集,a,b,c,d不重复出现的个数),即训练集中每个集合中不重复词的个数和(11是原来所有词个数,4是新词+旧词中不重复词的个数);1是新加入的词的个数;而计算之前出现过的比如说a的概率时,分母相同,分子就是出现次数+1,训练集出现4次,测试集1次,加起来5次,再加1;

贝叶斯分类器

注:上述公式计算的是类别已知的样本各特征出现概率,不是最终模型;

  • 平滑技术的核心就是增加未出现的词语的概率,降低已出现词语的概率;保证所有概率和为1;

  • 拉普拉斯平滑效果不很好;回推法(K-Z回退法)工程效果比较好;伯努利模型概率和不一定为1,可能需要做归一化;

工程上的tricks

贝叶斯分类器

贝叶斯分类器

  • 概率相除的方法只适用于二分类,不适用于多分类;多分类的话还是要计算所得概率,可以取对数,对数值越大,对应概率越大;

贝叶斯分类器

贝叶斯分类器

贝叶斯分类器

贝叶斯方法与最大似然的关系

教派争论:
- 最大似然法:不考虑贝叶斯公式的先验概率;
- 贝叶斯学派的适用范围更广,关键是要先验概率靠谱;
- 而频率学派有效的前提也是他们的先验概率同样是经验统计的结果。

贝叶斯公式是等式,适用于任何情况,但是在现实场景却难以符合前提,现实中往往难以得到一个准确的P(Y)先验概率,而最大似然则是忽略了贝叶斯公式中分子的先验概率P(Y)(这里贝叶斯与最大似然均没有考虑分母,因为现实中分母是相同的,往往直接忽略掉)

朴素贝叶斯方法优缺点

优点:

  1. 对待预测样本进行预测,过程简单速度快(想想邮件分类的问题,预测就是分词后进行概率乘积,在log域直接做加法更快)
  2. 对多分类问题也同样有效,复杂度也不会有大程度上升;
  3. 在分布独立这个假设成立的情况下,贝叶斯分类器效果奇好,会略胜于逻辑回归,同时我们需要的样本量也更少一些
  4. 对于类别类的输入特征变量,效果非常好。对于数值型变量特征,我们是默认它符合正太分布的。

缺点:

  1. 对于测试集中的一个类别变量特征,如果在训练集中没见过,直接算的话概率为0,预测功能就失效了。需要做“平滑”操作,最常见的平滑技术就是拉普拉斯估测;
  2. 朴素贝叶斯算出的概率结果,用于比较大小还可以,但是其实际物理意义不能当真;(因为大多是用于比价大小,很多时候为了省事,直接略去分母项也正是如此,对待比较的两个量,分母项是相同的);
  3. 朴素贝叶斯有条件独立的假设前提,而现实生活中这些predictor很难是完全独立的

应用场景:

  1. 文本分类/垃圾文本过滤/情感判别
  2. 多分类实时预测
  3. 推荐系统:
    朴素贝叶斯和协同过滤(collaborative filtering)是一堆好搭档,协同过滤是强相关性,但是泛化能力略弱,朴素贝叶斯和协同过滤一起,能增强推荐的覆盖度和效果。

朴素贝叶斯注意点:

  • 一般其他的模型(像logistic regression, SVM等)做完之后,我们都会尝试一下Bagging和boosting等融合增强方法。

  • 但朴素贝叶斯一般不做集成,原因是朴素贝叶斯太稳定了,性能不是很好,但是泛化能力很强,而Bagging也是旨在提升泛化能力,故而朴素贝叶斯不太适合做模型集成(性能一般,太稳定,没有太多需要取长补短的地方,都是表现平平)

朴素贝叶斯(NR)与Logistic regression(LR)异同

  1. LR分类器通过定义损失函数,最优化损失函数得到;而NR则通过统计,能跳过loss最优化直接的出来;

    Logistic regression是判别式模型,通过设定损失函数,利用梯度下降等方法最终拟合得到模型f(x)=w1(x)×x1+w2(x)×x2++wn(x)×xn,而NR是生成模型,直接通过统计即可用于预测;

  2. NR比LR多一个条件独立假设;

    朴素贝叶斯之所以能够直接通过统计概率求得最终预测结果的原因就是多了一个条件独立假设,而LR则没有.

  3. LR为判别式模型,NR为生成式模型

分析两者的联系:

贝叶斯分类器

  • 即朴素贝叶斯通过对数化之后,得到上述公式与logistic 回归f(x)=w1(x)×x1+w2(x)×x2++wn(x)×xn做对比,就可以看做在x只能取值0或1的时候log项对应logistic的权重w,上式中的log(p(S)p(H))对应logistic的常数项b;

  • 而朴素贝叶斯以为条件独立假设,上述的权值w可直接统计得到,无需定义损失函数,通过最优化策略拟合,而LR因为没有这个假设,不得不采用定义目标函数,损失函数,拟合权重w。

  • 贝叶斯公式就是一个恒等式,加上条件独立性假设,过渡到朴素贝叶斯,将之前的连续概率拆开为多项式乘积,之后无论是取对数也好,做除法也好,都是恒等式,最后得到上面等式。

  • 所以条件独立性假设就是将连续概率改为概率乘积形式,转换到对数之后就是线型相加,而逻辑回归也是线型相加的。只是逻辑回归是定义一个损失函数,在最小化损失函数来调整权重w,而朴素贝叶斯的条件独立性前提要求特别强,故而可以直接通过统计得到对应到逻辑回归的w,所以朴素贝叶斯的训练过程没有最优化。