朴素贝叶斯模型、推导、拉普拉斯平滑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334135/article/details/85086042

参考书籍:《统计学习方法》,cs229讲义,其他。

1、朴素贝叶斯

1.1、朴素贝叶斯模型

朴素贝叶斯:基于贝叶斯定理与特征条件独立假设的分类方法。注意两个点,一个是贝叶斯定理,另一个是条件独立假设,后面会用到,该方法用来进行分类,即:给定输入变量x,输出类别标记y

先定义好变量表示。记输入变量表示为 X X 为m维向量的集合,输出空间为类标记集合表示为 Y = { c 1 , c 2 , . . . , c K } Y=\{c_1,c_2,...,c_K\} ,训练集为 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } \{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} ,特征向量 x i x_i 是m维的(m个特征)向量表示为 x i = ( x i 1 , x i 2 , . . . , x i m ) T x_i=(x_i^1,x_i^2,...,x_i^m)^T x i j x_i^j 表示第 i i 个输入变量的第 j j 个特征。

根据贝叶斯公式有: P ( Y = c k X = x ) = P ( X = x , Y = c k ) P ( X = x ) = P ( X = x Y = c k ) P ( Y = c k ) P ( X = x ) P(Y=c_k|X=x)=\frac{P(X=x,Y= c_k)}{P(X=x)}=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)} 对于给定的 x x 我们可以求出后验概率 P ( Y = c k X = x ) P(Y=c_k|X=x) ,然后将后验概率最大的类作为 x x 类的输出。

看分子中的条件概率, P ( X = x Y = c k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . , X m = x m Y = c k ) P(X=x|Y=c_k)=P(X^1=x^1,X^2=x^2,...,X^m=x^m|Y=c_k) ,如果每个特征有 S j S_j 个取值那么参数个数为 K i = 1 m S j K\prod\limits_{i=1}^{m}S_j ,这种数量级的参数是不可行的。

而贝叶斯给了这么个强的条件独立的假设,注意不是独立假设,公式如下:

P ( X = x Y = c k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . , X m = x m Y = c k ) = j = 1 m P ( X j = x j Y = c k ) P(X=x|Y=c_k)=P(X^1=x^1,X^2=x^2,...,X^m=x^m|Y=c_k)=\prod\limits_{j=1}^{m}P(X^j=x^j|Y=c_k)

所以现在我们有

P ( Y = c k X = x ) = P ( X = x , Y = c k ) P ( X = x ) = P ( X = x Y = c k ) P ( Y = c k ) P ( X = x ) = P ( Y = c k ) j = 1 m P ( X j = x j Y = c k ) P ( X = x ) P(Y=c_k|X=x)=\frac{P(X=x,Y= c_k)}{P(X=x)}=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)}=\frac{P(Y=c_k)\prod\limits_{j=1}^{m}P(X^j=x^j|Y=c_k)}{P(X=x)}

对于输入 X = x X=x 将得到的最大的 P ( Y = c k X = x ) P(Y=c_k|X=x) 对应的类(即 c k c_k )作为输出。而分母对于输入的 c k c_k 都是一样的,所以我们得到。

y = arg max c k P ( Y = c k ) j = 1 m P ( X j = x j Y = c k ) y=\arg \max \limits_{c_k} P(Y=c_k)\prod\limits_{j=1}^{m}P(X^j=x^j|Y=c_k)
下面进行模型的学习,即参数估计

扫描二维码关注公众号,回复: 4899911 查看本文章

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

对于这种给定模型,数据,求参数的我们仍然使用极大似然估计。在这里也就是对 P ( Y = c k ) P(Y=c_k) P ( X j = x j Y = c k ) P(X^j=x^j|Y=c_k) 进行参数估计。

先对 P ( Y = c k ) P(Y=c_k) 进行参数估计,首先容易得到 P ( Y = c k ) = k = 1 K P ( Y = c k ) I ( y i = c k ) P(Y=c_k)=\sum\limits_{k=1}^{K}P(Y=c_k)^{I(y_i=c_k)} ,其中 I ( y i = c k ) I(y_i=c_k) 是指示函数 I ( t r u e ) = 1 , I ( f a l s e ) = 0 I(true)=1,I(false)=0 。写出似然函数并取对数:

l = l n L = l n i = 1 n ( P ( Y = c k ) j = 1 m P ( X j = x i j Y = c k ) ) = i = 1 n k = 1 K I ( y i = c k ) l n P ( Y = c k ) + i = 1 n j = 1 m l n P ( X j = x i j Y = c k ) l=lnL = ln \prod\limits_{i=1}^{n}(P(Y=c_k)\prod\limits_{j=1}^{m}P(X^j=x_i^j|Y=c_k))\\=\sum\limits_{i=1}^{n}\sum\limits_{k=1}^{K}I(y_i=c_k)ln^{P(Y=c_k)} + \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}ln^{P(X^j=x_i^j|Y=c_k)}

现在要求 l l 关于参数 P ( Y = c k ) P(Y=c_k) 最大值,就不要去直接求导了,这里参数还有个限制 k = 1 K P ( Y = c k ) = 1 \sum\limits _{k=1}^{K}P(Y=c_k)=1 。先看下百度百科的拉格朗日法的使用

在这里插入图片描述

现在我们加上限制条件来构造拉格朗日函数,这里我们记 P ( Y = c k ) = θ k P(Y=c_k)=\theta^k
这样看着更像参数

f = i = 1 n k = 1 K I ( y i = c k ) l n θ k + i = 1 n j = 1 m l n P ( X j = x j Y = c k ) + λ ( k = 1 K P ( Y = c k ) 1 ) f=\sum\limits_{i=1}^{n}\sum\limits_{k=1}^{K}I(y_i=c_k)ln^{\theta^k} + \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}ln^{P(X^j=x^j|Y=c_k)} + \lambda(\sum\limits _{k=1}^{K}P(Y=c_k)-1)
分别求导如下:
f θ k = i = 1 n I ( y i = c k ) θ k + λ = 0 = > θ k = i = 1 n I ( y i = c k ) λ f^{'}_{\theta^k}=\frac{\sum\limits_{i=1}^{n}I(y_i=c_k)}{\theta^k}+\lambda=0 =>\theta^k=-\frac{\sum\limits_{i=1}^{n}I(y_i=c_k)}{\lambda} 两把对k求和得到 k = 1 K θ k = n λ \sum\limits _{k=1}^{K}\theta^k=-\frac{n}{\lambda}
f λ = k = 1 K θ k 1 = 0 = > k = 1 K θ k = 1 f^{'}_{\lambda}=\sum\limits _{k=1}^{K}\theta^k-1=0=>\sum\limits _{k=1}^{K}\theta^k=1 所以 n λ = 1 = > λ = n -\frac{n}{\lambda}=1 => \lambda=-n

所以 θ k = P ( Y = c k ) = i = 1 n I ( y i = c k ) λ = > θ k = i = 1 n I ( y i = c k )   n \theta^k=P(Y=c_k)=-\frac{\sum\limits_{i=1}^{n}I(y_i=c_k)}{\lambda}=>\theta^k=\frac{\sum\limits_{i=1}^{n}I(y_i=c_k)}{\ n}

而对 P ( X j = x j Y = c k ) P(X^j=x^j|Y=c_k) 进行估计也得先做点小变换,设第 j j 个特征 x j x^{j} 可能取值的集合为 { a j 1 , a j 2 , . . . , a j S j } \{a_{j1},a_{j2},...,a_{jS_j}\} , a j l a_{jl} 是第 j j 个特征可能取的第 l l 个值,那么有如下的变换:
P ( X j = x j Y = c k ) = k = 1 K P ( X j = x j Y = c k ) I ( Y = c k ) = k = 1 K l = 1 S l P ( X j = a j l Y = c k ) I ( X j = a j l , Y = c k ) P(X^j=x^j|Y=c_k)=\sum\limits_{k=1}^{K}P(X^j=x^j|Y=c_k)^{I(Y=c_k)}=\sum\limits_{k=1}^{K}\sum\limits_{l=1}^{S_l}P(X^j=a_{jl}|Y=c_k)^{I(X^j=a_{jl},Y=c_k)} ,然后再带入使用拉格朗日去求。

最后的结果是 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\limits_{i=1}^{n}I(x_i^j=a_{jl},y_i=c_k)}{\sum\limits_{i=1}^{n}I(y_i=c_k)}

2.3、拉普拉斯平滑

用极大似然估计学得的朴素贝叶斯模型,可能会出现个问题,那就是出现$ P ( X j = a j l Y = c k ) = 0 P(X^j=a_{jl}|Y=c_k)=0 然后导致 P ( Y = c k X = x ) = 0 P(Y=c_k|X=x)=0 ,举个例子来说,将朴素贝叶斯分类用在垃圾邮件过滤。 X X 表示为各个单词组成的向量, Y = 0 , 1 Y={0,1} ,假设0表示垃圾邮件。然后我们有X(邮件),预测它是不是垃圾邮件,一旦X中出现了新词那么结果就为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 λ P(X^j=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^{n}I(x_i^j=a_{jl},y_i=c_k)+\lambda}{\sum\limits_{i=1}^{n}I(y_i=c_k)+S_j\lambda} λ = 0 \lambda=0 的时候就是极大似然估计了,而当 λ = 1 \lambda=1 的时候称为拉普拉斯平滑。

猜你喜欢

转载自blog.csdn.net/qq_37334135/article/details/85086042