机器学习(Machine Learning)笔记系列4:朴素贝叶斯(Naive Bayes)

什么是朴素贝叶斯

朴素贝叶斯(naïve Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法。

  1. 朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y)。具体地,学习以下先验概率分布及条件概率分布。
    先验概率分布:
    (1) P ( Y = c k ) , k = 1 , 2 , ⋯   , K \begin{aligned} P\left(Y=c_{k}\right), \quad k=1,2, \cdots, K\tag{1} \end{aligned} P(Y=ck),k=1,2,,K(1)
    条件概率分布:
    (2) P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K \begin{aligned} P\left(X=x | Y=c_{k}\right)=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right), \quad k=1,2, \cdots, K\tag{2} \end{aligned} P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck),k=1,2,,K(2)
    通过公式(1),(2)可以学到联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)
    朴素贝叶斯法对条件概率分布作了条件独立性的假设。由于这是一个较强的假设,朴素贝叶斯法也由此得名。具体地,条件独立性假设是
    (3) P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) \begin{aligned} \begin{aligned} P\left(X=x | Y=c_{k}\right) &=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right) \\ &=\prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) \end{aligned}\tag{3} \end{aligned} P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)(3)
    朴素贝叶斯法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设等于是说用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
    朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布 P ( Y = c k ∣ X = x ) P(Y=c_k |X=x) P(YckXx),将后验概率最大的类作为x的类输出。后验概率计算根据贝叶斯定理进行:
    (4) P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ k P ( X = x ∣ Y = c k ) P ( Y = c k ) \begin{aligned} P\left(Y=c_{k} | X=x\right)=\frac{P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)}{\sum_{k} P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)}\tag{4} \end{aligned} P(Y=ckX=x)=kP(X=xY=ck)P(Y=ck)P(X=xY=ck)P(Y=ck)(4)
    将(3)代入(4)可得:
    (5) P ( Y = c k ∣ X = x ) = P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K \begin{aligned} P\left(Y=c_{k} | X=x\right)=\frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}, \quad k=1,2, \cdots, K\tag{5} \end{aligned} P(Y=ckX=x)=kP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck),k=1,2,,K(5)
  2. 因为是用于分类,所以我们只需将(5)式最大概率计算计算出来,那么新输入实例就是该最大概率对应的类:
    (6) y = f ( x ) = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) \begin{aligned} y=f(x)=\arg \max _{c_{k}} \frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}\tag{6} \end{aligned} y=f(x)=argckmaxkP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck)(6)
    这里有一点需要注意,计算过程中,分母都是一样的,因此只需要比较分子的大小即可,那么(6)式可以等价于求:
    (7) y = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) \begin{aligned} y=\arg \max _{c_{k}} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)\tag{7} \end{aligned} y=argckmaxP(Y=ck)jP(X(j)=x(j)Y=ck)(7)

朴素贝叶斯的参数估计

  1. 极大似然估计
    在朴素贝叶斯法中,学习意味着估计 P ( Y = c k ) P(Y=c_k ) P(Yck) P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)} =x^{(j)}|Y=c_k ) P(X(j)x(j)Yck)。可以应用极大似然估计法估计相应的概率。先验概率 P ( Y = c k ) P(Y=c_k ) P(Y=ck)的极大似然估计是:
    (8) P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , ⋯   , K \begin{aligned} P\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)}{N}, \quad k=1,2, \cdots, K\tag{8} \end{aligned} P(Y=ck)=Ni=1NI(yi=ck),k=1,2,,K(8)
    设第j个特征x^{(j)} 可能取值的集合为 ( a j 1 , a j 2 , … , a j S j ) (a_{j1} ,a_{j2} ,…,a_{jSj}) (aj1,aj2,,ajSj),条件概率 P ( x ( j ) = a j l ∣ Y = c k ) P(x^{(j)} =a_{jl} |Y=c_k) P(x(j)ajlYck)的极大似然估计是:
    (9) P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k ) j = 1 , 2 , ⋯   , n ; l = 1 , 2 , ⋯   , S i ; k = 1 , 2 , ⋯   , K \begin{aligned} P\left(X^{(j)}=a_{jl} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{jl}, y_{i}=c_{k}\right)}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)}\\j=1,2, \cdots, n ; l=1,2, \cdots, S_{i} ; \quad k=1,2, \cdots, K\tag{9} \end{aligned} P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck)j=1,2,,n;l=1,2,,Si;k=1,2,,K(9)
    式中, x i j x_i^{j} xij是第 i i i个样本的第 j j j个特征; a j l a_{jl} ajl 是第 j j j个特征可能取的第 l l l个值; I I I为指示函数。
  2. 学习与分类算法
    在1. 中计算先验概率和条件概率后,对于给定的实例 X = ( x ( 1 ) , x ( 2 ) , … , x ( n ) ) T {X}=\left({x}^{(1)}, {x}^{(2)}, \ldots, {x}^{(n)}\right)^{\mathrm{T}} X=(x(1),x(2),,x(n))T,计算 P ( Y = c k ) ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K P\left(Y=c_{k}\right) \prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right), \quad k=1,2, \cdots, K P(Y=ck)j=1nP(X(j)=x(j)Y=ck),k=1,2,,K,然后再根据公式(7)确定实例 X {X} X的类。
  3. 贝叶斯估计
    用极大似然估计可能会出现所要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。具体地,条件概率的贝叶斯估计是
    (10) P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( i ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ \begin{aligned} P_{\lambda}\left(X^{(j)}=a_{jl} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(i)}=a_{jl}, y_{i}=c_{k}\right)+\lambda}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+S_{j} \lambda}\tag{10} \end{aligned} Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(i)=ajl,yi=ck)+λ(10)
    式中 λ ≥ 0 \lambda≥0 λ0。等价于在随机变量各个取值的频数上赋予一个正数 λ > 0 \lambda>0 λ>0。当 λ = 0 \lambda=0 λ0时就是极大似
    然估计。常取 λ = 1 \lambda=1 λ1,这时称为拉普拉斯平滑(Laplace smoothing)。显然,对任何 l = 1 , 2 , … , S j , k = 1 , 2 , … , K l=1,2, …,S_j ,k=1,2,…,K l1,2,,Sjk1,2,,K有:
    (11) P λ ( X ( j ) = a j l ∣ Y = c k ) > 0 ∑ l = 1 S j P ( X ( j ) = a j l ∣ Y = c k ) = 1 \begin{aligned} \begin{array}{l}{P_{\lambda}\left(X^{(j)}=a_{j l} | Y=c_{k}\right)>0} \\ {\sum_{l=1}^{S_{j}} P\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=1}\end{array}\tag{11} \end{aligned} Pλ(X(j)=ajlY=ck)>0l=1SjP(X(j)=ajlY=ck)=1(11)
    表明式(9)确为一种概率分布。同样,先验概率的贝叶斯估计是:
    (12) P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ \begin{aligned} P_{\lambda}\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+\lambda}{N+K \lambda}\tag{12} \end{aligned} Pλ(Y=ck)=N+Kλi=1NI(yi=ck)+λ(12)

例子:垃圾邮件分类

假设有3封垃圾邮件和3封正常邮件。
其中3封垃圾邮件提取的特征词分别为:

  1. 点击,更多,信息
  2. 最新,产品
  3. 信息,点击,链接

3封垃圾邮件提取的特征词分别为:

  1. 开会
  2. 信息,详见,邮件
  3. 最新,信息

那么“新邮件特征词:最新,产品,点击,链接”是垃圾邮件还是正常邮件:
step 1: 构建词库
  database = {点击,更多,信息,最新,产品,链接,开会,详见,邮件},即K=9
step 2: 选取 λ = 1 \lambda=1 λ=1,即采用拉普拉斯平滑(Laplace smoothing),计算先验概率和条件概率
  先验概率:P(垃圾)=3/(3+3)=1/2
  先验概率:P(正常)=3/(3+3)=1/2
  条件概率:
(13) P ( 点 击 / 垃 圾 ) = 2 + 1 8 + 9 = 3 17 P ( 更 多 / 垃 圾 ) = 1 + 1 8 + 9 = 2 17 P ( 信 息 / 垃 圾 ) = 2 + 1 8 + 9 = 3 17 P ( 最 新 / 垃 圾 ) = 1 + 1 8 + 9 = 2 17 P ( 产 品 / 垃 圾 ) = 1 + 1 8 + 9 = 2 17 P ( 链 接 / 垃 圾 ) = 1 + 1 8 + 9 = 2 17 P ( 开 会 / 垃 圾 ) = 0 + 1 8 + 9 = 1 17 P ( 详 见 / 垃 圾 ) = 0 + 1 8 + 9 = 1 17 P ( 邮 件 / 垃 圾 ) = 0 + 1 8 + 9 = 1 17 \begin{aligned} P(点击/垃圾)=\frac{2+1}{8+9}=\frac{3}{17}\\P(更多/垃圾)=\frac{1+1}{8+9}=\frac{2}{17}\\P(信息/垃圾)=\frac{2+1}{8+9}=\frac{3}{17}\\P(最新/垃圾)=\frac{1+1}{8+9}=\frac{2}{17}\\P(产品/垃圾)=\frac{1+1}{8+9}=\frac{2}{17}\\P(链接/垃圾)=\frac{1+1}{8+9}=\frac{2}{17}\\P(开会/垃圾)=\frac{0+1}{8+9}=\frac{1}{17}\\P(详见/垃圾)=\frac{0+1}{8+9}=\frac{1}{17}\\P(邮件/垃圾)=\frac{0+1}{8+9}=\frac{1}{17}\tag{13} \end{aligned} P(/)=8+92+1=173P(/)=8+91+1=172P(/)=8+92+1=173P(/)=8+91+1=172P(/)=8+91+1=172P(/)=8+91+1=172P(/)=8+90+1=171P(/)=8+90+1=171P(/)=8+90+1=171(13)
(14) P ( 点 击 / 正 常 ) = 0 + 1 6 + 9 = 1 15 P ( 更 多 / 正 常 ) = 0 + 1 6 + 9 = 1 15 P ( 信 息 / 正 常 ) = 2 + 1 6 + 9 = 3 15 P ( 最 新 / 正 常 ) = 1 + 1 6 + 9 = 2 15 P ( 产 品 / 正 常 ) = 0 + 1 6 + 9 = 1 15 P ( 链 接 / 正 常 ) = 0 + 1 6 + 9 = 1 15 P ( 开 会 / 正 常 ) = 1 + 1 6 + 9 = 2 15 P ( 详 见 / 正 常 ) = 1 + 1 6 + 9 = 2 15 P ( 邮 件 / 正 常 ) = 1 + 1 6 + 9 = 2 15 \begin{aligned} P(点击/正常)=\frac{0+1}{6+9}=\frac{1}{15}\\P(更多/正常)=\frac{0+1}{6+9}=\frac{1}{15}\\P(信息/正常)=\frac{2+1}{6+9}=\frac{3}{15}\\P(最新/正常)=\frac{1+1}{6+9}=\frac{2}{15}\\P(产品/正常)=\frac{0+1}{6+9}=\frac{1}{15}\\P(链接/正常)=\frac{0+1}{6+9}=\frac{1}{15}\\P(开会/正常)=\frac{1+1}{6+9}=\frac{2}{15}\\P(详见/正常)=\frac{1+1}{6+9}=\frac{2}{15}\\P(邮件/正常)=\frac{1+1}{6+9}=\frac{2}{15}\tag{14} \end{aligned} P(/)=6+90+1=151P(/)=6+90+1=151P(/)=6+92+1=153P(/)=6+91+1=152P(/)=6+90+1=151P(/)=6+90+1=151P(/)=6+91+1=152P(/)=6+91+1=152P(/)=6+91+1=152(14)
step 3: 确定实例X的类
  X={最新,产品,点击,链接}
P 1 ( 垃 圾 / 新 邮 件 ) = 2 17 ∗ 2 17 ∗ 3 17 ∗ 2 17 ∗ P ( 垃 圾 ) = 2 17 ∗ 2 17 ∗ 3 17 ∗ 2 17 ∗ 1 2 P 2 ( 正 常 / 新 邮 件 ) = 2 15 ∗ 1 15 ∗ 1 15 ∗ 1 15 ∗ P ( 正 常 ) = 2 15 ∗ 1 15 ∗ 1 15 ∗ 1 15 ∗ 1 2 \begin{aligned} P1(垃圾/新邮件)={\frac{2}{17}*\frac{2}{17}*\frac{3}{17}*\frac{2}{17}}*{P(垃圾)}={\frac{2}{17}*\frac{2}{17}*\frac{3}{17}*\frac{2}{17}}*{\frac{1}{2}}\\P2(正常/新邮件)={\frac{2}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}}*{P(正常)}={\frac{2}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{2}} \end{aligned} P1(/)=172172173172P()=17217217317221P2(/)=152151151151P()=15215115115121
  比较P1和P2的大小,若P1>P2,则为垃圾邮件,否则为正常邮件。

参考
[1]. 李航. 统计学习方法[M]. 2012.
[2]. 贪心科技-机器学习特训营课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值