参考书籍:《统计学习方法》,cs229讲义,其他。
1、朴素贝叶斯
1.1、朴素贝叶斯模型
朴素贝叶斯:基于贝叶斯定理与特征条件独立假设的分类方法。注意两个点,一个是贝叶斯定理,另一个是条件独立假设,后面会用到,该方法用来进行分类,即:给定输入变量x,输出类别标记y
先定义好变量表示。记输入变量表示为XXX为m维向量的集合,输出空间为类标记集合表示为Y={c1,c2,...,cK}Y=\{c_1,c_2,...,c_K\}Y={c1,c2,...,cK},训练集为{(x1,y1),(x2,y2),...,(xn,yn)}\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}{(x1,y1),(x2,y2),...,(xn,yn)},特征向量xix_ixi是m维的(m个特征)向量表示为xi=(xi1,xi2,...,xim)Tx_i=(x_i^1,x_i^2,...,x_i^m)^Txi=(xi1,xi2,...,xim)T。xijx_i^jxij表示第iii个输入变量的第jjj个特征。
根据贝叶斯公式有:P(Y=ck∣X=x)=P(X=x,Y=ck)P(X=x)=P(X=x∣Y=ck)P(Y=ck)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)}P(Y=ck∣X=x)=P(X=x)P(X=x,Y=ck)=P(X=x)P(X=x∣Y=ck)P(Y=ck) 对于给定的xxx我们可以求出后验概率P(Y=ck∣X=x)P(Y=c_k|X=x)P(Y=ck∣X=x),然后将后验概率最大的类作为xxx类的输出。
看分子中的条件概率,P(X=x∣Y=ck)=P(X1=x1,X2=x2,...,Xm=xm∣Y=ck)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=ck)=P(X1=x1,X2=x2,...,Xm=xm∣Y=ck),如果每个特征有SjS_jSj个取值那么参数个数为K∏i=1mSjK\prod\limits_{i=1}^{m}S_jKi=1∏mSj,这种数量级的参数是不可行的。
而贝叶斯给了这么个强的条件独立的假设,注意不是独立假设,公式如下:
P(X=x∣Y=ck)=P(X1=x1,X2=x2,...,Xm=xm∣Y=ck)=∏j=1mP(Xj=xj∣Y=ck)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(X=x∣Y=ck)=P(X1=x1,X2=x2,...,Xm=xm∣Y=ck)=j=1∏mP(Xj=xj∣Y=ck)
所以现在我们有
P(Y=ck∣X=x)=P(X=x,Y=ck)P(X=x)=P(X=x∣Y=ck)P(Y=ck)P(X=x)=P(Y=ck)∏j=1mP(Xj=xj∣Y=ck)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)}P(Y=ck∣X=x)=P(X=x)P(X=x,Y=ck)=P(X=x)P(X=x∣Y=ck)P(Y=ck)=P(X=x)P(Y=ck)j=1∏mP(Xj=xj∣Y=ck)
对于输入X=xX=xX=x将得到的最大的P(Y=ck∣X=x)P(Y=c_k|X=x)P(Y=ck∣X=x)对应的类(即 ckc_kck)作为输出。而分母对于输入的ckc_kck都是一样的,所以我们得到。
y=argmaxckP(Y=ck)∏j=1mP(Xj=xj∣Y=ck)y=\arg \max \limits_{c_k} P(Y=c_k)\prod\limits_{j=1}^{m}P(X^j=x^j|Y=c_k)y=argckmaxP(Y=ck)j=1∏mP(Xj=xj∣Y=ck)
下面进行模型的学习,即参数估计
1.2、朴素贝叶斯的参数估计
对于这种给定模型,数据,求参数的我们仍然使用极大似然估计。在这里也就是对P(Y=ck)P(Y=c_k)P(Y=ck)和P(Xj=xj∣Y=ck)P(X^j=x^j|Y=c_k)P(Xj=xj∣Y=ck)进行参数估计。
先对P(Y=ck)P(Y=c_k)P(Y=ck)进行参数估计,首先容易得到 P(Y=ck)=∑k=1KP(Y=ck)I(yi=ck)P(Y=c_k)=\sum\limits_{k=1}^{K}P(Y=c_k)^{I(y_i=c_k)}P(Y=ck)=k=1∑KP(Y=ck)I(yi=ck),其中I(yi=ck)I(y_i=c_k)I(yi=ck)是指示函数I(true)=1,I(false)=0I(true)=1,I(false)=0I(true)=1,I(false)=0。写出似然函数并取对数:
l=lnL=ln∏i=1n(P(Y=ck)∏j=1mP(Xj=xij∣Y=ck))=∑i=1n∑k=1KI(yi=ck)lnP(Y=ck)+∑i=1n∑j=1mlnP(Xj=xij∣Y=ck)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=lnL=lni=1∏n(P(Y=ck)j=1∏mP(Xj=xij∣Y=ck))=i=1∑nk=1∑KI(yi=ck)lnP(Y=ck)+i=1∑nj=1∑mlnP(Xj=xij∣Y=ck)
现在要求lll关于参数P(Y=ck)P(Y=c_k)P(Y=ck)最大值,就不要去直接求导了,这里参数还有个限制∑k=1KP(Y=ck)=1\sum\limits _{k=1}^{K}P(Y=c_k)=1k=1∑KP(Y=ck)=1。先看下百度百科的拉格朗日法的使用
现在我们加上限制条件来构造拉格朗日函数,这里我们记P(Y=ck)=θkP(Y=c_k)=\theta^kP(Y=ck)=θk
这样看着更像参数
f=∑i=1n∑k=1KI(yi=ck)lnθk+∑i=1n∑j=1mlnP(Xj=xj∣Y=ck)+λ(∑k=1KP(Y=ck)−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=i=1∑nk=1∑KI(yi=ck)lnθk+i=1∑nj=1∑mlnP(Xj=xj∣Y=ck)+λ(k=1∑KP(Y=ck)−1)
分别求导如下:
fθk′=∑i=1nI(yi=ck)θk+λ=0=>θk=−∑i=1nI(yi=ck)λ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}fθk′=θki=1∑nI(yi=ck)+λ=0=>θk=−λi=1∑nI(yi=ck)两把对k求和得到∑k=1Kθk=−nλ\sum\limits _{k=1}^{K}\theta^k=-\frac{n}{\lambda}k=1∑Kθk=−λn
fλ′=∑k=1Kθk−1=0=>∑k=1Kθk=1f^{'}_{\lambda}=\sum\limits _{k=1}^{K}\theta^k-1=0=>\sum\limits _{k=1}^{K}\theta^k=1fλ′=k=1∑Kθk−1=0=>k=1∑Kθk=1所以−nλ=1=>λ=−n-\frac{n}{\lambda}=1 => \lambda=-n−λn=1=>λ=−n
所以θk=P(Y=ck)=−∑i=1nI(yi=ck)λ=>θk=∑i=1nI(yi=ck) 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}θk=P(Y=ck)=−λi=1∑nI(yi=ck)=>θk= ni=1∑nI(yi=ck)
而对P(Xj=xj∣Y=ck)P(X^j=x^j|Y=c_k)P(Xj=xj∣Y=ck)进行估计也得先做点小变换,设第jjj个特征xjx^{j}xj可能取值的集合为{aj1,aj2,...,ajSj}\{a_{j1},a_{j2},...,a_{jS_j}\}{aj1,aj2,...,ajSj},ajla_{jl}ajl是第jjj个特征可能取的第lll个值,那么有如下的变换:
P(Xj=xj∣Y=ck)=∑k=1KP(Xj=xj∣Y=ck)I(Y=ck)=∑k=1K∑l=1SlP(Xj=ajl∣Y=ck)I(Xj=ajl,Y=ck)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(Xj=xj∣Y=ck)=k=1∑KP(Xj=xj∣Y=ck)I(Y=ck)=k=1∑Kl=1∑SlP(Xj=ajl∣Y=ck)I(Xj=ajl,Y=ck),然后再带入使用拉格朗日去求。
最后的结果是 P(Xj=ajl∣Y=ck)=∑i=1nI(xij=ajl,yi=ck)∑i=1nI(yi=ck)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)}P(Xj=ajl∣Y=ck)=i=1∑nI(yi=ck)i=1∑nI(xij=ajl,yi=ck)
2.3、拉普拉斯平滑
用极大似然估计学得的朴素贝叶斯模型,可能会出现个问题,那就是出现$P(Xj=ajl∣Y=ck)=0P(X^j=a_{jl}|Y=c_k)=0P(Xj=ajl∣Y=ck)=0然后导致P(Y=ck∣X=x)=0P(Y=c_k|X=x)=0P(Y=ck∣X=x)=0,举个例子来说,将朴素贝叶斯分类用在垃圾邮件过滤。XXX表示为各个单词组成的向量,Y=0,1Y={0,1}Y=0,1,假设0表示垃圾邮件。然后我们有X(邮件),预测它是不是垃圾邮件,一旦X中出现了新词那么结果就为0当做垃圾邮件了,显然不合理。解决办法是使用贝叶斯估计,结果中加了个参数
P(Xj=ajl∣Y=ck)=∑i=1nI(xij=ajl,yi=ck)+λ∑i=1nI(yi=ck)+Sjλ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}P(Xj=ajl∣Y=ck)=i=1∑nI(yi=ck)+Sjλi=1∑nI(xij=ajl,yi=ck)+λ 当λ=0\lambda=0λ=0的时候就是极大似然估计了,而当λ=1\lambda=1λ=1的时候称为拉普拉斯平滑。