第四章-朴素贝叶斯法

极大似然估计

用极大似然估计法推出朴素贝叶斯法中的概率估计公式

1.在朴素贝叶斯法中,学习意味着估计 P ( Y = c k ) P(Y=c_k) P(Y=ck) P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)}=x^{(j)}|Y=c_k) P(X(j)=x(j)Y=ck)。可以应用极大似然估计法估计相应的概率。先验概率 P ( Y = c k ) P(Y=c_k) P(Y=ck)的极大似然估计是

P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N (1) P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N} \tag{1} P(Y=ck)=Ni=1NI(yi=ck)(1)

在朴素贝叶斯法中,学习意味着估计 P ( Y = c k ) P(Y=c_k) P(Y=ck) P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)}=x^{(j)}|Y=c_k) P(X(j)=x(j)Y=ck)

答:

  • P = P ( Y = c k ) P=P(Y=c_k) P=P(Y=ck)

  • L = P ∑ i = 1 N I ( y i = c k ) ∗ ( 1 − P ) ∑ i = 1 N I ( y i ≠ c k ) L=P^{\sum_{i=1}^{N}I(y_i=c_k)}*(1-P)^{\sum_{i=1}^{N}I(y_i\neq c_k)} L=Pi=1NI(yi=ck)(1P)i=1NI(yi=ck)

  • 两边同时取对数得 l n L = l n P ∑ i = 1 N I ( y I = c k ) + l n ( 1 − P ) ∑ i = 1 N I ( y i = c k ) ) lnL=lnP\sum_{i=1}^{N}I(y_I=c_k)+ln(1-P)\sum_{i=1}^{N}I(y_i=c_k)) lnL=lnPi=1NI(yI=ck)+ln(1P)i=1NI(yi=ck))

  • P P P求偏导得

∂ L ∂ P = ∑ i = 1 N I ( y I = c k ) P − ∑ i = 1 N I ( y I ≠ c k ) 1 − P = 0 \frac{\partial L}{\partial P}=\frac{\sum_{i=1}^{N}I(y_I=c_k)}{P}-\frac{\sum_{i=1}^{N}I(y_I\neq c_k)}{1-P}=0 PL=Pi=1NI(yI=ck)1Pi=1NI(yI=ck)=0

  • 最终得 P = P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N P=P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N} P=P(Y=ck)=Ni=1NI(yi=ck)
  • END
2.设第 j j j个特称 x ( j ) x^{(j)} x(j)可能取值的集合为 a j 1 , … , a j S j {a_{j1},\dots,a_{jS_j}} aj1,,ajSj,条件概率 P ( X ( j ) = a j l ∣ Y = c k ) P(X^{(j)}=a_{jl}|Y=c_k) P(X(j)=ajlY=ck)的极大似然估计是

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 ) P(X_{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)} P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck)

j = 1 , … , n ; l = 1 , … , S j ; k = 1 , … , K j=1,\dots,n;l=1,\dots,S_j;k=1,\dots,K j=1,,n;l=1,,Sj;k=1,,K式中 x i ( j ) x_i^{(j)} xi(j)表示第 i i i个样本的第 j j j个特征, a j l a_{jl} ajl是第 j j j个特征可能取得第 l l l个值, I I I为指数函数。

答:

  • P ( X ( j ) = a j l ∣ Y = c k ) = P ( X ( j ) = a j l , Y = c k ) P ( Y = c k ) P(X_{(j)}=a_{jl}|Y=c_k)=\frac{P(X_{(j)}=a_{jl},Y=c_k)}{P(Y=c_k)} P(X(j)=ajlY=ck)=P(Y=ck)P(X(j)=ajl,Y=ck)

  • 由上式(1)可得,分母 P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N} P(Y=ck)=Ni=1NI(yi=ck)

  • 同理分子 P ( X ( j ) = a j l , Y = c k ) = ∑ i = 1 N I ( X i ( j ) = a j l , Y = c k ) N P(X_{(j)}=a_{jl},Y=c_k)=\frac{\sum_{i=1}^{N}I(X_{i}^{(j)}=a_{jl},Y=c_k)}{N} P(X(j)=ajl,Y=ck)=Ni=1NI(Xi(j)=ajl,Y=ck)

  • 代入原式化简得 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 ) P(X_{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)} P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck)

  • END

贝叶斯估计

用贝叶斯估计法推出朴素贝叶斯法中的概率估计公式

1.用极大似然估计可能会出现所要估计得概率值为0得情况。这时会影响到后验概率估计的结果,是分类产生偏差。解决这一问题的方式是采用贝叶斯估计。具体的,条件概率的贝叶斯估计是

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 ) + S j λ (2) P_\lambda(X_{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{\sum_{i=1}^{N}I(y_i=c_k)+S_j\lambda} \tag{2} Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ(2)

式中 λ ≥ 0 \lambda \geq 0 λ0。等价于在随机变量各个取值的频数上赋予一个正数 λ > 0 \lambda > 0 λ>0。当 λ = 0 \lambda =0 λ=0时就是极大似然估计。常取 λ = 0 \lambda=0 λ=0,这是称为拉普拉斯平滑(Laplacian smoothing)。显然对任何 l = 1 , … , S j , k = 1 , … , K l=1,\dots,S_j,k=1,\dots,K l=1,,Sj,k=1,,K,有
P λ ( X ( j ) = a j l ∣ Y = c k ) > 0 ∑ l = 1 S j P ( X ( j ) = a j l ∣ Y = c k ) = 1 P_\lambda(X_{(j)}=a_{jl}|Y=c_k) > 0 \\ \sum_{l=1}^{S_j}P(X^{(j)}=a_{jl}|Y=c_k) = 1 Pλ(X(j)=ajlY=ck)>0l=1SjP(X(j)=ajlY=ck)=1

答:

  • P λ ( X ( j ) = a j l ∣ Y = c k ) = P ( X ( j ) = a j l , Y = c k ) P ( Y = c k ) P_\lambda(X_{(j)}=a_{jl}|Y=c_k)=\frac{P(X_{(j)}=a_{jl},Y=c_k)}{P(Y=c_k)} Pλ(X(j)=ajlY=ck)=P(Y=ck)P(X(j)=ajl,Y=ck)
  • 根据(3) P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P_\lambda(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\lambda}{N+K\lambda} Pλ(Y=ck)=N+Kλi=1NI(yi=ck)+λ,同时令 λ = λ S j \lambda=\lambda S_j λ=λSj
  • 同理 P ( X ( j ) = a j l , Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ N + k λ S j P(X_{(j)}=a_{jl},Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{N+k\lambda S_j} P(X(j)=ajl,Y=ck)=N+kλSji=1NI(xi(j)=ajl,yi=ck)+λ
  • P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ N + k λ S j / ∑ i = 1 N I ( y i = c k ) + λ N + K λ P_\lambda(X_{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{N+k\lambda S_j} \bigg / \frac{\sum_{i=1}^{N}I(y_i=c_k)+\lambda}{N+K\lambda} Pλ(X(j)=ajlY=ck)=N+kλSji=1NI(xi(j)=ajl,yi=ck)+λ/N+Kλi=1NI(yi=ck)+λ
  • 整理得 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 ) + S j λ P_\lambda(X_{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{\sum_{i=1}^{N}I(y_i=c_k)+S_j\lambda} Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ
  • END
2.表达式(2)确为一种概率分布。同样,先验概率的贝叶斯估计是

P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ (3) P_\lambda(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\lambda}{N+K\lambda} \tag{3} Pλ(Y=ck)=N+Kλi=1NI(yi=ck)+λ(3)

答:

  • 考虑加入先验概率,在没有任何信息得情况下可假设先验概率均匀分布,由 P = P ( Y = c k ) = 1 K P=P(Y=c_k)=\frac{1}{K} P=P(Y=ck)=K1 P K − 1 = 0 PK-1=0 PK1=0
  • 由公式(1)得 P N − ∑ i = 1 N I ( Y = c k ) = 0 PN-\sum_{i=1}^{N}I(Y=c_k)=0 PNi=1NI(Y=ck)=0
  • 构造 λ ( P K − 1 ) + P N − ∑ i = 1 N I ( Y = c k ) = 0 \lambda(PK-1)+PN-\sum_{i=1}^{N}I(Y=c_k)=0 λ(PK1)+PNi=1NI(Y=ck)=0
  • 上式化简得 P = P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P=P_\lambda(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\lambda}{N+K\lambda} P=Pλ(Y=ck)=N+Kλi=1NI(yi=ck)+λ
  • END
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第四章李航统计学习方(第二版)详细介绍了朴素贝叶斯以及其编程实现。朴素贝叶斯是基于贝叶斯定理和特征条件独立假设的分类算。它通过计算给定类别的先验概率和各个特征的条件概率来进行分类。 在编程实现朴素贝叶斯的过程中,我们可以使用Python语言和sklearn模块来简化实现过程。sklearn是Python中一个非常常用的机器学习库,其中包含了很多经典的机器学习算和常用的工具函数。 具体实现朴素贝叶斯可以分为以下几个步骤: 1. 引入相应的库和模块: ```python from sklearn.naive_bayes import GaussianNB ``` 2. 创建一个朴素贝叶斯分类器对象: ```python clf = GaussianNB() ``` 3. 准备训练数据和标签: ```python X_train = [[方1特征1, 方1特征2, ...], [方2特征1, 方2特征2, ...], ...] y_train = [标签1, 标签2, ...] ``` 4. 训练模型: ```python clf.fit(X_train, y_train) ``` 5. 准备测试数据: ```python X_test = [[方3特征1, 方3特征2, ...], [方4特征1, 方4特征2, ...], ...] ``` 6. 进行预测: ```python y_pred = clf.predict(X_test) ``` 这样就可以使用sklearn中的朴素贝叶斯模块来实现分类任务。实际上,sklearn还提供了多个不同的朴素贝叶斯的实现,如高斯朴素贝叶斯(GaussianNB)、多项式朴素贝叶斯(MultinomialNB)和伯努利朴素贝叶斯(BernoulliNB)等。 总之,通过使用sklearn模块来调用朴素贝叶斯,可以方便地实现并应用该算进行分类任务,并且能够根据需要选择不同的朴素贝叶斯模型。建议阅读第四章李航统计学习方(第二版)来更加深入地理解朴素贝叶斯的原理和实现细节。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值