要求:

  1. 特征之间相互独立
  2. 我们需要人工筛选出已知信息。训练模型的本质就是计算出每个概率的可能性。不需要迭代

1、背景的统计学知识

1.1、统计学的两个学派

  • 贝叶斯学派:根据先验知识对一个事物进行估计发生的概率,然后不断的去修改这个事情的先验知识(把第一次的后验概率当作下一次的先验概率),但是无法绝对。也就是说保留了一定的不确定性。
  • 频率学派(主流):事件A在独立重复试验中发生的频率趋于极限p,那么这个极限就是该事件的概率。这意味着我们需要将一个事件重复无数次并且进行统计。但是现实情况下对于某些问题这个很难做到。

    1.2、推导过程

  • 条件独立公式,如果X和Y相互独立,相互之间没有影响。则有:

    1. ![](https://cdn.nlark.com/yuque/__latex/b4d6430be5a174dd610dfae384712716.svg#card=math&code=P%28X%20%5Ccap%20Y%29%20%3DP%28X%29P%28Y%29&height=20&width=172)<br /> ![](https://cdn.nlark.com/yuque/__latex/2098b8d9a2df435fd3eb5ba56374217d.svg#card=math&code=P%28X%2CY%29%3D%20P%28X%5Ccap%20Y%29%3DP%28XY%29&height=20&width=230)是同一个表达
  • 条件概率公式:在Y的情况下X发生的概率

    朴素贝叶斯算法 - 图1

  • 全概率公式

    朴素贝叶斯算法 - 图2
    从上面的公式很容易得出贝叶斯公式:
    朴素贝叶斯算法 - 图3
    在人工智能中的表达为:
    朴素贝叶斯算法 - 图4
    朴素贝叶斯算法 - 图5是假设,朴素贝叶斯算法 - 图6是数据(已知信息)
    朴素贝叶斯算法 - 图7是先验概率(先验概率顾名思义是看到数据前的猜测,事件朴素贝叶斯算法 - 图8本来发生的概率,,很主观)
    朴素贝叶斯算法 - 图9是后验概率(后验概率顾名思义是拿到数据之后的猜测,也可以理解成新信息出现后朴素贝叶斯算法 - 图10的概率)
    朴素贝叶斯算法 - 图11是数据发生的概率
    朴素贝叶斯算法 - 图12是在这个假设下数据发生的概率,也叫似然函数 。
    朴素贝叶斯算法 - 图13为可能性函数,表明的是D给H造成的影响。是一个调整因子,作用是让先验概率H更加的真实

    1.3、争议点

    贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。被频率学派攻击的是先验概率,一般来说先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布的模型,比如正态分布,beta分布等。这个假设一般没有特定的依据,因此一直被频率学派认为很荒谬。虽然难以从严密的数学逻辑里推出贝叶斯学派的逻辑,但是在很多实际应用中,贝叶斯理论很好用,比如垃圾邮件分类,文本分类。

    2、朴素贝叶斯的模型

    假如我们的分类模型样本是:朴素贝叶斯算法 - 图14
    即我们有m个样本,每个样本有n个特征,特征输出有K个类别,定义为朴素贝叶斯算法 - 图15
    从样本我们可以学习得到朴素贝叶斯的先验分布 朴素贝叶斯算法 - 图16
    接着学习到条件概率分布 朴素贝叶斯算法 - 图17
    然后我们就可以用贝叶斯公式得到X和Y的联合分布朴素贝叶斯算法 - 图18了。
    联合分布朴素贝叶斯算法 - 图19定义为:
    朴素贝叶斯算法 - 图20
    从上面的式子可以看出 朴素贝叶斯算法 - 图21 比较容易通过最大似然法求出,得到的 朴素贝叶斯算法 - 图22 就是类别 朴素贝叶斯算法 - 图23在训练集里面出现的频数。
    但是朴素贝叶斯算法 - 图24很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立(朴素一词的由来),这样就可以得出:
    朴素贝叶斯算法 - 图25
    从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。
    但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。
    最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征 朴素贝叶斯算法 - 图26 ,我们如何判断它属于哪个类型?
    既然是贝叶斯模型,当然是后验概率最大化来判断分类了。我们只要计算出所有的K个条件概率 朴素贝叶斯算法 - 图27,然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。

    3、朴素贝叶斯的推断过程

    朴素贝叶斯的推断过程做一个完整的诠释过程。

我们预测的类别 朴素贝叶斯算法 - 图28 是使朴素贝叶斯算法 - 图29最大化的类别,数学表达式为:

朴素贝叶斯算法 - 图30

由于对于所有的类别计算朴素贝叶斯算法 - 图31时,上式的分母是一样的,都是朴素贝叶斯算法 - 图32 ,因此,我们的预测公式可以简化为:

朴素贝叶斯算法 - 图33
接着我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
朴素贝叶斯算法 - 图34

4、朴素贝叶斯的参数估计

    在上一节中,我们知道只要求出朴素贝叶斯算法 - 图35,我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率。

对于朴素贝叶斯算法 - 图36 ,比较简单,通过极大似然估计我们很容易得到朴素贝叶斯算法 - 图37为样本类别朴素贝叶斯算法 - 图38出现的频率,即样本类别朴素贝叶斯算法 - 图39出现的次数朴素贝叶斯算法 - 图40 除以样本总数m。

对于朴素贝叶斯算法 - 图41,这个取决于我们的先验条件:

a) 如果我们的朴素贝叶斯算法 - 图42是离散的值,那么我们可以假设朴素贝叶斯算法 - 图43 符合多项式分布,这样得到朴素贝叶斯算法 - 图44 是在样本类别朴素贝叶斯算法 - 图45中,朴素贝叶斯算法 - 图46出现的频率。即:

朴素贝叶斯算法 - 图47
其中 朴素贝叶斯算法 - 图48为样本类别朴素贝叶斯算法 - 图49出现的次数,而 朴素贝叶斯算法 - 图50为类别为 朴素贝叶斯算法 - 图51的样本中,第 j 维特征朴素贝叶斯算法 - 图52出现的次数。

某些时候,可能某些类别在样本中没有出现,这样可能导致朴素贝叶斯算法 - 图53为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:

朴素贝叶斯算法 - 图54

其中朴素贝叶斯算法 - 图55 为一个大于0的常数,常常取为1。朴素贝叶斯算法 - 图56为第j个特征的取值个数。

b)如果我们我们的朴素贝叶斯算法 - 图57是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设 X_j 符合伯努利分布,即特征朴素贝叶斯算法 - 图58出现记为1,不出现记为0。即只要朴素贝叶斯算法 - 图59 出现即可,我们不关注朴素贝叶斯算法 - 图60的次数。这样得到 朴素贝叶斯算法 - 图61 是在样本类别朴素贝叶斯算法 - 图62 中,朴素贝叶斯算法 - 图63出现的频率。此时有:

朴素贝叶斯算法 - 图64

其中, 朴素贝叶斯算法 - 图65取值为0和1。

c)如果我们我们的朴素贝叶斯算法 - 图66是连续值,我们通常取朴素贝叶斯算法 - 图67的先验概率为正态分布,即在样本类别朴素贝叶斯算法 - 图68中,朴素贝叶斯算法 - 图69的值符合正态分布。这样朴素贝叶斯算法 - 图70的概率分布是:

朴素贝叶斯算法 - 图71

其中朴素贝叶斯算法 - 图72朴素贝叶斯算法 - 图73是正态分布的期望和方差,可以通过极大似然估计求得。朴素贝叶斯算法 - 图74 为在样本类别朴素贝叶斯算法 - 图75中,所有 X_j 的平均值。朴素贝叶斯算法 - 图76 为在样本类别朴素贝叶斯算法 - 图77中,所有朴素贝叶斯算法 - 图78的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。

5、朴素贝叶斯算法过程

    我们假设训练集为m个样本n个维度,如下:

朴素贝叶斯算法 - 图79

共有K个特征输出类别,分别为朴素贝叶斯算法 - 图80,每个特征输出类别的样本个数为朴素贝叶斯算法 - 图81,在第k个类别中,如果是离散特征,则特征 朴素贝叶斯算法 - 图82各个类别取值为 朴素贝叶斯算法 - 图83。其中l取值为朴素贝叶斯算法 - 图84朴素贝叶斯算法 - 图85为特征j不同的取值数。

输出为实例朴素贝叶斯算法 - 图86的分类。

算法流程如下:

1) 如果没有Y的先验概率,则计算Y的K个先验概率:朴素贝叶斯算法 - 图87,否则 朴素贝叶斯算法 - 图88 为输入的先验概率。

2) 分别计算第k个类别的第j维特征的第l个个取值条件概率:朴素贝叶斯算法 - 图89

a)如果是离散值:

朴素贝叶斯算法 - 图90

朴素贝叶斯算法 - 图91可以取值为1,或者其他大于0的数字。

b)如果是稀疏二项离散值:朴素贝叶斯算法 - 图92

此时 l 只有两种取值。

c)如果是连续值不需要计算各个l的取值概率,直接求正态分布的参数:
朴素贝叶斯算法 - 图93
需要求出朴素贝叶斯算法 - 图94朴素贝叶斯算法 - 图95朴素贝叶斯算法 - 图96 为在样本类别朴素贝叶斯算法 - 图97中,所有 朴素贝叶斯算法 - 图98的平均值。朴素贝叶斯算法 - 图99为在样本类别朴素贝叶斯算法 - 图100 中,所有朴素贝叶斯算法 - 图101的方差。

3)对于实例朴素贝叶斯算法 - 图102,分别计算:

朴素贝叶斯算法 - 图103

4)确定实例朴素贝叶斯算法 - 图104的分类朴素贝叶斯算法 - 图105

朴素贝叶斯算法 - 图106

从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高。

6. 朴素贝叶斯算法小结

    朴素贝叶斯算法的主要原理基本已经做了总结,这里对朴素贝叶斯的优缺点做一个总结。

朴素贝叶斯的主要优点有:

  1. 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
  2. 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
  3. 对缺失数据不太敏感,算法也比较简单,常用于文本分类
  4. 训练模型的本质就是计算出每个概率的可能性,不需要迭代。

朴素贝叶斯的主要缺点有:

  1. 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
  2. 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
  3. 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
  4. 对输入数据的表达形式很敏感。