美文网首页
朴素贝叶斯:虽然天真但是有用

朴素贝叶斯:虽然天真但是有用

作者: 金色暗影 | 来源:发表于2020-10-14 21:23 被阅读0次
    Naive

    在很久很久以前,早在电子邮件还是最重要的通讯工具的时代,为了识别垃圾邮件,朴素贝叶斯算法就已经大行其道了.它因为过于天真的条件独立性假设,一直被人诟病愚蠢,但也正式这个假设,使它适用性强且高效.

    现实世界中,推理模型,不在于它有多强或是有多复杂,用的恰到好处恰如其分才是关键.比如在一些简单的文本任务上,使用Bert之类的深度模型总有杀鸡用牛刀之嫌,因为它太大太慢太没有发挥空间.而在那些标注数据很少,含义不是太深,又希望能够快速推理,模型快速迭代的场景,朴素贝叶斯算法用起来不要太爽.

    朴素贝叶斯用于计算一个特征集合的样本属于某个分类的后验概率,然后取最大后验概率的那个分类作为推理结果.
    给定一个n维的特征向量([x_1, x_2, x_3,...,x_n]),和一个类别向量y ,那么根据贝叶斯定理,有以下关系:
    P(y|x_1,x_2,...,x_n) = \frac{P(x_1,x_2,...,x_n|y)*P(y)}{P(x_1,x_2,...,x_n)}
    很明显,想要计算P(x_1,x_2,...,x_n|y)是十分困难的,于是朴素贝叶斯给出了一个很蠢的假设,即当y确定时,所有的特征之间是独立的(实际上对于大多数场景,这个假设并不成立..这也是太天真的原因)...于是乎,上面的公式就可以化简为:
    \begin{align} P(y|x_1,x_2,...,x_n) =& \frac{P(x_1,x_2,...,x_n|y)*P(y)}{P(x_1,x_2,...,x_n)} \\ =& \frac{\prod_{i=1}^nP(x_i|y)*P(y)}{P(x_1,x_2,...,x_n)} \end{align}
    在给定输入的情况下[x_1, x_2, x_3,...,x_n]是一个常量, 于是我们可以忽略它从而得到这样一个分类规则:
    P(y|x_1,x_2,...,x_n) \propto \prod_{i=1}^nP(x_i|y)*P(y) \\ \Downarrow \\ y' = argmax_y \prod_{i=1}^n P(x_i|y)*P(y)
    当然,对于给定的训练数据,P(y)也是个定值,即先验概率...可以用类y的样本在整个训练集中所占的比率估计出来.而P(x_i|y)可以通过极大似然估计的方式得到.

    各种朴素贝叶斯方法的主要区别在于它们对类条件概率密度分布 P(x_i|y)做了不同的假设。

    下面,就让我们来看看朴素贝叶斯P(x_i|y)的几种常见假设:伯努利分布朴素贝叶斯/多项分布朴素贝叶斯/高斯分布朴素贝叶斯.

    伯努利分布朴素贝叶斯

    这个从小学就开始接触的分类大概是国人最熟悉不过的分布了,很简单,就是一个两点分布,咱把它门记作x \in [0,1],那么如果x=1的概率为p,x=0的概率就是1-p, 于是属于某个类的概率便是:
    f(x) = p^x(1-p)^{1-x}
    以上是针对一个变量的情形,显然,在朴素贝叶斯中,对应的是多变量的情形,于是采用的是多变量的伯努利分布(此处注意与多维伯努利的区别,它并没有\sum_i^n x_i=1的约束),我们可以把它理解为对n个条件独立事件进行了一次伯努力试验,于是概率分布可以表示为连乘积的形式:
    P(x_1,x_2,...,x_n|y) = \prod_{i=1}^n [ p^{x_i}x_i+(1-p^{x_i})(1-x_i)]
    然后,再使用极大似然估计法,很容易得出某个特征出现的概率是P(x_i|y)=\frac{N_{x_i,y}}{N_y} ,不出现就是 1-P(x_i|y) . (N_y是所有y类样本数,而N_{x_i,y}是含有特征x_i 的y类样本数).

    多项分布朴素贝叶斯

    多项分布朴素贝叶斯不再将特征集合中的所有特征都进行一次伯努利试验,而是将所有出现的特征看作是一次试验,出现相应特征的概率服从多项分布,即假设n种特征每种出现的概率为p_{x_i}, 并且特征出现与否是互斥的,满足\sum_{i=1}^n p_{x_i}=1,于是,对于一个出现k个特征的样本,相当于做了k次试验,相应特征出现了a次,那么显然,使用极大似然估计,可以得出
    P(x_i|y) = \frac{N_{x_i,y}}{Nx_i}
    其中,N_{x_i} 是特征x_i 出现的总次数,N_{x_i,y}是特征x_iy类中出现的总次数.

    很容易发现,与假设为伯努利分布不同,该方式只考虑了出现的特征,对于一个新的样本,并不会因为没有出现某种特征而降低后验概率.

    高斯分布朴素贝叶斯

    高斯分布实际就是将前面的多项分布离散的概率分布改为了连续的形式,假设每个特征x出现的概率服从\mathcal N(\mu,\sigma^2), 于是
    P(x_i|y) = \frac{1}{\sqrt{2\pi}\sigma}e^\frac{(x_i-\mu)^2}{2\sigma^2}
    相当于只要求出\mu\sigma 即可,通过最大似然估计法容易得出
    \mu = \frac {\sum {x_i|y}}{N_{y_i}} , \\ \sigma^2 = \sum (x_i|y - \mu)/N_{x_i,y}
    y分类下, 特征x_i 的均值和方差.

    总结

    相比于其他更复杂的方法,朴素贝叶斯学习器和分类器非常快。 分类条件分布的解耦意味着可以独立单独地把每个特征视为一维分布来估计。这样反过来有助于缓解维度灾难带来的问题。

    另一方面,尽管朴素贝叶斯被认为是一种相当不错的分类器,但却不是好的估计器,所以不能太过于重视从其计算的属于某一类的概率。

    尽管朴素贝叶斯的假设过于天真,但实际在很多情况下,朴素贝叶斯工作得很好,特别是文档分类和垃圾邮件过滤。这些工作都要求一个小的训练集来估计必需参数,朴素贝叶斯虽然天真但是有用~

    Naive

    参考资料

    An introduction to machine learning with scikit-learn

    相关文章

      网友评论

          本文标题:朴素贝叶斯:虽然天真但是有用

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