Naive Bayes 分类算法 (多项式分布)

简介

Naive Bayes 分类是基于贝叶斯定理和特征独立性假设的分类算法。
本文主要讲(参数)多项分布下的贝叶斯定理。

推导 1

由条件概率公式


得以下两个乘法公式:


然后可以得出:


即:

我们可以看出来,贝叶斯定理是描述P(A|B)和P(B|A)之间的关系的一条定理。
可以用贝叶斯定理由P(A|B),结合P(A)和P(B)推导出P(B|A)。

推导 2

由推导1 可以得出:

引入条件独立假设:

为了方便处理 ,我们假设在Y条件下,所有独立,基于这个条件独立假设,我们得到等式:

结合前两者,我们得到等式

当然,在我们进行分类的时候,分母的值不重要:

  • 情况下,分类是yes的概率为:
  • 情况下,结果是no的概率为:

分类即是比较概率大小,既然大家的分母 都是一样的,我们可以将它拿掉。

得到贝叶斯算法的多项式公式:

应用举例

已有数据集 (训练集):

畏寒 流鼻涕 头痛 发烧 流感
Y N 中等 Y N
Y Y N Y
Y N 强烈 Y Y
N Y 中等 Y Y
N N N N
N Y 强烈 Y Y
N Y 强烈 N N
Y Y 中等 Y Y

判断是否为流感(测试):

畏寒 流鼻涕 头痛 发烧 流感
Y N 中等 N ???

步骤:

  1. 计算P(流感=Y) 和 P(流感=N)
    P(流感=Y) = 5 / 8 = 0.625, P(流感=N) = 3 / 8 = 0.375
    
  2. 把流感=Y和流感=N的案例分开来, 分别计算各种参数在流感=Y和流感=N的情况下的各种概率:
    P(畏寒=Y|流感=Y) = 3 / 5 = 0.6, P(畏寒=Y|流感=N) = 1 / 3 = 0.333
    P(畏寒=N|流感=Y) = 2 / 5 = 0.4, P(畏寒=N|流感=N) = 2 / 3 = 0.666
    P(流鼻涕=Y|流感=Y) = 4 / 5 = 0.8, P(流鼻涕=Y|流感=N) = 1 / 3 = 0.333
    P(流鼻涕=N|流感=Y) = 1 / 5 = 0.2, P(流鼻涕=N|流感=N) = 2 / 3 = 0.666
    P(头痛=强烈|流感=Y) = 2 / 5 = 0.4, P(头痛=强烈|流感=N) = 1 / 3 = 0.333
    P(头痛=中等|流感=Y) = 2 / 5 = 0.4, P(头痛=中等|流感=N) = 1 / 3 = 0.333
    P(头痛=无|流感=Y) = 1 / 5 = 0.2, P(头痛=无|流感=N) = 1 / 3 = 0.333
    P(发烧=Y|流感=Y) = 4 / 5 = 0.8, P(发烧=Y|流感=N) = 1 / 3 = 0.333
    P(发烧=N|流感=Y) = 1 / 5 = 0.2, P(发烧=N|流感=N) = 2 / 3 = 0.666
    
  3. 分别计算测试情况下,流感为Y 和 流感为N 的概率,即:
    P(流感=Y|畏寒=Y,流鼻涕=N,头痛=中等,发烧=N)     
    = P(流感=Y)·P(畏寒=Y|流感=Y)·P(流鼻涕=N|流感=Y)·P(头痛=中等|流感=Y)·P(发烧=N|流感=Y)   
    = 0.625 \* 0.6 \* 0.2 \* 0.4 \* 0.2     
    = 0.006     
    P(流感=N|畏寒=Y,流鼻涕=N,头痛=中等,发烧=N)    
    = P(流感=N)·P(畏寒=Y|流感=N)·P(流鼻涕=N|流感=N)·P(头痛=中等|流感=N)·P(发烧=N|流感=N)
    = 0.375 \* 0.333 \* 0.666 \* 0.333 \* 0.666    
    = 0.185
    
  4. 标准化(可选)
    我们注意到上面两个概率相加并不等于1,
    虽然不影响分类,但我们可以把他们标准化:
    P(流感=Y|畏寒=Y,流鼻涕=N,头痛=中等,发烧=N) =
    P(流感=N|畏寒=Y,流鼻涕=N,头痛=中等,发烧=N) =

  5. 结论
    此测试记录不是流感的概率比较高,为0.969,分类为 流感=N。

优点

  • 算法比较简单
  • 发源于古典数学,分类效率稳定
  • 对小规模数据表现良好
  • 在数据量较大时,可以对模型进行增量式训练,减小对内存的要求
  • 对缺失数据不敏感

缺点

  • 现实中,条件独立性假设很难完全实现。
  • 多项式的贝叶斯分类模型只适用于离散型的参数,对于连续型的数值需先进行分级(binning)。