在神经网络技术还不成熟的时候,朴素贝叶斯分类器(NBC)是文档分类的利器。即便是在神经网络满地走的今天,朴素贝叶斯模型依然有很大的价值。进行文档分类时,这个模型只需要进行几次简单的循环,就可以给出结果,在一些对结果要求不是特别高、对性能要求很高的场景下,具有很大的价值。
这篇文章以文档分类问题引出,重点将特征的伯努利分布(Bernoulli)带入朴素贝叶斯模型,熟悉贝叶斯统计的流程和计算。
本文的md源码在这里:AnBlog/统计和机器学习
在进行文档分类之前,需要对文本进行一些处理。对于这个模型来说,最关键的一步是建立一个特征(feature)向量,向量的每个分量(entry)对应文本中可能出现的一个单词,取值 0 , 1 0,1 0,1,表示存在/不存在。
这样的一个分量用伯努利分布描述,参数为 θ \theta θ:
p ( x = 1 ∣ θ ) = θ , p ( x = 0 ∣ θ ) = 1 − θ p(x=1|\theta)=\theta,p(x=0|\theta)=1-\theta p(x=1∣θ)=θ,p(x=0∣θ)=1−θ
在其他问题中,这个分布可能取正态分布,或其他分布,但过程的其他部分大同小异。
建立这样的一个从「单词」到「 0 , 1 0,1 0,1」的映射,可以通过简单的哈希表实现。一段文本中可能出现各种各样的单词,为了保证完备,一段文本对应的特征可能特别多,可能包含所有的英语单词、中文字符,以及世界上的各种其他语言!一定存在一些更省空间的优化,但这不是这篇文章的重点。
模型的目标由需求决定,通常是个二分类问题,判断邮件是/不是垃圾邮件。这篇文章讨论多类分类问题,目标 y y y服从多项的伯努利分布(Multinoulli),参数为 π \pi π:
p ( y ∣ π ) = ∏ c π c I ( y = c ) , ∑ c π c = 1 p(y|\pi)=\prod_c\pi_c^{I(y=c)},\sum_c\pi_c=1 p(y∣π)=c∏πcI(y=c),c∑πc=1
解决问题的过程,就是根据现有的数据 D D D,估计参数 θ , π \theta,\pi θ,π,从而求目标 y y y未来取某值的概率 p ( y = … ) p(y=…) p(y=…)。
「朴素」指的是假设对象的特征都相互独立,这当然不是一个完美的假设,所以才「朴素」(naive)。也就是说,对象特征 x ⃗ \vec x x的概率分布函数,是各个特征 x j x_j xj的概率分布函数的乘积:
p ( x ⃗ ) = ∏ j = 1 D p ( x j ) p(\vec x)=\prod_{j=1}^Dp(x_j) p(x)=j=1∏Dp(xj)
假设一个多类分类问题,在具有数据集合 D D D的时候,看见一些特征 x ⃗ \vec x x时,目标 y y y应取何值。目标 y y y由概率分布描述:
p ( y = c ∣ x ⃗ , D ) p(y=c|\vec x,D) p(y=c∣x,D)
用这个模型进行预测:
p ( y = c ∣ x ⃗ , D ) ∝ p ( y = c ∣ D ) p ( x ⃗ ∣ y = c , D ) = p ( y = c ∣ D ) ∏ j p ( x j ∣ y = c , D ) p(y=c|\vec x,D)\propto p(y=c|D)p(\vec x|y=c,D)=p(y=c|D)\prod_jp(x_j|y=c,D) p(y=c∣x,D)∝p(y=c∣D)p(x∣y=c,D)=p(y=c∣D)j∏p(xj∣y=c,D)
模型的目标是分别表达出 p ( y = c ∣ D ) , p ( x j ∣ y = c , D ) p(y=c|D),p(x_j|y=c,D) p(y=c∣D),p(xj∣y=c,D)。
假设特征 x x x都只能取得两个离散的值 0 , 1 0,1 0,1,表示「是否存在」,可以用伯努利分布描述这样的数据:
p ( x j ∣ θ j ) = θ j x j ( 1 − θ j ) 1 − x j p(x_j|\theta_j)=\theta_j^{x_j}(1-\theta_j)^{1-x_j} p(xj∣θj)=θjxj(1−θj)1−xj
x x x当然可以取其他的值和分布,取值连续时可以取正态分布,取值为多个离散值时可以是多项伯努利分布。
为了让模型具备更多数据,参数 θ \theta θ和目标分类 c c c发生依赖,不同的 c c c对应不同的参数 θ \theta θ,则要估计的参数 θ \theta θ是一个矩阵 θ j c \theta_{jc} θjc:
p ( x j ∣ y = c , θ j c ) = θ j c x j ( 1 − θ j c ) 1 − x j p(x_j|y=c,\theta_{jc})=\theta_{jc}^{x_j}(1-\theta_{jc})^{1-x_j} p(xj∣y=c,θjc)=θjcxj(1−θjc)1−xj
还未完成的是表达 p ( θ j c ∣ D ) p(\theta_{jc}|D) p(θjc∣D)。
y y y可以取离散的多个不同值, y ∣ D y|D y∣D和特征 x x x无关,可以通过多项伯努利分布描述:
p ( y ∣ π ) = ∏ c π c I ( y = c ) , ∑ c π c = 1 p(y|\pi)=\prod_c\pi_c^{I(y=c)},\sum_c\pi_c=1 p(y∣π)=c∏πcI(y=c),c∑πc=1
参数 π \pi π也需要估计。
写出联合后验分布:
p ( θ , π ∣ D ) ∝ p ( θ , π ) p ( D ∣ θ , π ) = p ( θ ) p ( π ) p ( D ∣ θ , π ) p(\theta,\pi|D)\propto p(\theta,\pi)p(D|\theta,\pi)=p(\theta)p(\pi)p(D|\theta,\pi) p(θ,π∣D)∝p(θ,π)p(D∣θ,π)=p(θ)p(π)p(D∣θ,π)
接上式似然:
p ( D ∣ θ , π ) = ∏ i p ( x ( i ) , y ( i ) ∣ θ , π ) = ∏ i p ( x ( i ) ∣ θ , π ) p ( y ( i ) ∣ θ , π ) = ∏ i p ( x ( i ) | θ ) p ( y ( i ) ∣ π ) p(D|\theta,\pi)=\prod_ip(x^{(i)},y^{(i)}|\theta,\pi)=\prod_ip(x^{(i)}|\theta,\pi)p(y^{(i)} |\theta,\pi)=\prod_ip(x^{(i)}|\theta)p(y^{(i)} |\pi) p(D∣θ,π)=i∏p(x(i),y(i)∣θ,π)=i∏p(x(i)∣θ,π)p(y(i)∣θ,π)=i∏p(x(i)|θ)p(y(i)∣π)
其中,对每个特征 j j j:
p ( x ( i ) ∣ θ ) = ∏ j = 1 D p ( x j ( i ) ∣ θ j ) p(x^{(i)}|\theta)=\prod_{j=1}^Dp(x_j^{(i)}|\theta_j) p(x(i)∣θ)=j=1∏Dp(xj(i)∣θj)
为不同的分类设置不同的参数 θ \theta θ以增加模型的复杂度:
p ( x j ( i ) ∣ θ j c ) = ∏ c p ( x j ( i ) ∣ θ j c ) I ( y ( i ) = c ) , p ( x j ( i ) ∣ θ j c ) = θ j c x j ( i ) ( 1 − θ j c ) 1 − x j ( i ) p(x_j^{(i)}|\theta_{jc})=\prod_cp(x_j^{(i)}|\theta_{jc})^{I(y^{(i)}=c)},p(x_j^{(i)}|\theta_{jc})=\theta_{jc}^{x_j^{(i)}}(1-\theta_{jc})^{1-x_j^{(i)}} p(xj(i)∣θjc)=c∏p(xj(i)∣θjc)I(y(i)=c),p(xj(i)∣θjc)=θjcxj(i)(1−θjc)1−xj(i)
取对数:
ln p ( D ∣ θ , π ) = ln ∏ i p ( x ( i ) , y ( i ) ∣ θ , π ) = ∑ i ( ln p ( y ( i ) ∣ π ) + ∑ j ln p ( x j ( i ) ∣ θ j ) ) \ln p(D|\theta,\pi)=\ln \prod_ip(x^{(i)},y^{(i)}|\theta,\pi)=\sum_i(\ln p(y^{(i)}|\pi)+\sum_j\ln p(x^{(i)}_j|\theta_j)) lnp(D∣θ,π)=lni∏p(x(i),y(i)∣θ,π)=i∑(lnp(y(i)∣π)+j∑lnp(xj(i)∣θj))
y y y部分:
∑ i ln p ( y ( i ) ∣ π ) = ∑ i ∑ c I ( y ( i ) = c ) × ln π c = ∑ c N c ln π c \sum_i\ln p(y^{(i)}|\pi)=\sum_i\sum_cI(y^{(i)}=c)\times\ln\pi_c=\sum_cN_c\ln\pi_c i∑lnp(y(i)∣π)=i∑c∑I(y(i)=c)×lnπc=c∑Nclnπc
x x x部分:
∑ i ∑ j ln p ( x j ( i ) ∣ θ j ) = ∑ j ∑ c ∑ i : y ( i ) = c ( x j ( i ) ln θ j c + ( 1 − x j ( i ) ) ln ( 1 − θ j c ) ) \sum_i\sum_j\ln p(x^{(i)}_j|\theta_j)=\sum_j\sum_c\sum_{i:y^{(i)}=c}(x_j^{(i)}\ln\theta_{jc}+(1-x_j^{(i)})\ln(1-\theta_{jc})) i∑j∑lnp(xj(i)∣θj)=j∑c∑i:y(i)=c∑(xj(i)lnθjc+(1−xj(i))ln(1−θjc))
边界条件:
∑ c π c = 1 \sum_c\pi_c=1 c∑πc=1
以上确定了最大似然估计的最优化问题,以下分别求参数值。
目标函数:
L ( θ , π ) = ∑ j ∑ c ∑ i : y ( i ) = c ( x j ( i ) ln θ j c + ( 1 − x j ( i ) ) ln ( 1 − θ j c ) ) + ∑ c N c ln π c − λ ( ∑ c π c − 1 ) L(\theta,\pi)=\sum_j\sum_c\sum_{i:y^{(i)}=c}(x_j^{(i)}\ln\theta_{jc}+(1-x_j^{(i)})\ln(1-\theta_{jc}))+\sum_cN_c\ln\pi_c-\lambda(\sum_c\pi_c-1) L(θ,π)=j∑c∑i:y(i)=c∑(xj(i)lnθjc+(1−xj(i))ln(1−θjc))+c∑Nclnπc−λ(c∑πc−1)
计数记号:
N c = ∑ i I ( y ( i ) = c ) , N D = # r o w s = ∑ c N c = ∑ i 1 N_c=\sum_iI(y^{(i)}=c),N_D=\#rows=\sum_c N_c=\sum_i1 Nc=i∑I(y(i)=c),ND=#rows=c∑Nc=i∑1
参数 π \pi π:
∂ ∂ π c L ( θ , π ) = N c π c − λ = 0 ⇒ N c = λ π c \frac{\partial}{\partial \pi_c}L(\theta,\pi)=\frac{N_c}{\pi_c}-\lambda=0\Rightarrow N_c=\lambda\pi_c ∂πc∂L(θ,π)=πcNc−λ=0⇒Nc=λπc
带入边界条件:
N D = ∑ c N c = λ ∑ c π c = λ N_D=\sum_cN_c=\lambda\sum_c\pi_c=\lambda ND=c∑Nc=λc∑πc=λ
也就是说:
π ^ c = N c N D \hat\pi_c=\frac{N_c}{N_D} π^c=NDNc
参数 θ \theta θ:
∂ ∂ θ j c L ( θ , π ) = ∑ i : y ( i ) = c ( x j ( i ) θ j c − 1 − x j ( i ) 1 − θ j c ) \frac{\partial}{\partial \theta_{jc}}L(\theta,\pi)=\sum_{i:y^{(i)}=c}(\frac{x_j^{(i)}}{\theta_{jc}}-\frac{1-x_j^{(i)}}{1-\theta_{jc}}) ∂θjc∂L(θ,π)=i:y(i)=c∑(θjcxj(i)−1−θjc1−xj(i))
求和:
∑ i : y ( i ) = c ( x j ( i ) θ j c − 1 − x j ( i ) 1 − θ j c ) = ∑ i : y ( i ) = c x j ( i ) θ j c − N c − ∑ i : y ( i ) = c x j ( i ) 1 − θ j c \sum_{i:y^{(i)}=c}(\frac{x_j^{(i)}}{\theta_{jc}}-\frac{1-x_j^{(i)}}{1-\theta_{jc}})= \frac{\sum_{i:y^{(i)}=c}x_j^{(i)}}{\theta_{jc}}-\frac{N_c-\sum_{i:y^{(i)}=c}x_j^{(i)}}{1-\theta_{jc}} i:y(i)=c∑(θjcxj(i)−1−θjc1−xj(i))=θjc∑i:y(i)=cxj(i)−1−θjcNc−∑i:y(i)=cxj(i)
引入新的计数变量,带入:
∑ i : y ( i ) = c x j ( i ) = N j c , ∑ i : y ( i ) = c ( x j ( i ) θ j c − 1 − x j ( i ) 1 − θ j c ) = N j c θ j c − N c − N j c 1 − θ j c \sum_{i:y^{(i)}=c}x_j^{(i)}=N_{jc},\sum_{i:y^{(i)}=c}(\frac{x_j^{(i)}}{\theta_{jc}}-\frac{1-x_j^{(i)}}{1-\theta_{jc}})=\frac{N_{jc}}{\theta_{jc}}-\frac{N_c-N_{jc}}{1-\theta_{jc}} i:y(i)=c∑xj(i)=Njc,i:y(i)=c∑(θjcxj(i)−1−θjc1−xj(i))=θjcNjc−1−θjcNc−Njc
算一下:
θ ^ j c = N j c N c \hat\theta_{jc}=\frac{N_{jc}}{N_c} θ^jc=NcNjc
结果惊人的简单!只要简单地遍历整个样本矩阵,就可以完成训练。
最大似然估计在大多数情况下可以满足需求,以下继续走贝叶斯统计的流程。
以下是锦上添花,如果前面已经看晕了最好先缓缓。
假设先验具有相同形式:
p ( θ j c ) ∝ θ j c a j c − 1 ( 1 − θ j c ) b j c − 1 , p ( π ) ∝ ∏ c π c β c − 1 p(\theta_{jc})\propto\theta_{jc}^{a_{jc}-1}(1-\theta_{jc})^{b_{jc}-1},p(\pi)\propto\prod_c\pi_c^{\beta_c-1} p(θjc)∝θjcajc−1(1−θjc)bjc−1,p(π)∝c∏πcβc−1
先验也可以是其他形式,为了方便,此处及以下使用与似然相同的形式。
后验表达式:
p ( θ , π ∣ D ) ∝ p ( D ∣ θ , π ) p ( θ ) p ( π ) = p ( θ ) p ( π ) ∏ i p ( x ( i ) ∣ θ ) p ( y ( i ) ∣ π ) p(\theta,\pi|D)\propto p(D|\theta,\pi)p(\theta)p(\pi)= p(\theta)p(\pi)\prod_ip(x^{(i)}|\theta)p(y^{(i)} |\pi) p(θ,π∣D)∝p(D∣θ,π)p(θ)p(π)=p(θ)p(π)i∏p(x(i)∣θ)p(y(i)∣π)
参数 π \pi π:
p ( π ∣ D ) ∝ p ( π ) ∏ i p ( y ( i ) ∣ π ) = ∏ c π c N c + β c − 1 p(\pi|D)\propto p(\pi)\prod_ip(y^{(i)}|\pi)=\prod_c\pi_c^{N_c+\beta_c-1} p(π∣D)∝p(π)i∏p(y(i)∣π)=c∏πcNc+βc−1
归一化系数:
1 Z π = ∫ ∏ c π c N c + β c − 1 d π = ∏ c ∫ 0 1 π c N c + β c − 1 d π c = ∏ c 1 N c + β c \frac{1}{Z_\pi}=\int\prod_c\pi_c^{N_c+\beta_c-1}d\pi= \prod_c\int_0^1\pi_c^{N_c+\beta_c-1}d\pi_c=\prod_c\frac{1}{N_c+\beta_c} Zπ1=∫c∏πcNc+βc−1dπ=c∏∫01πcNc+βc−1dπc=c∏Nc+βc1
算一下:
Z π = ∏ c ( N c + β c ) Z_\pi=\prod_c(N_c+\beta_c) Zπ=c∏(Nc+βc)
参数 θ \theta θ:
p ( θ j c ∣ D ) ∝ θ j c N j c + a j c − 1 ( 1 − θ j c ) N c − N j c + b j c − 1 p(\theta_{jc}|D)\propto\theta_{jc}^{N_{jc}+a_{jc}-1}(1-\theta_{jc})^{N_c-N_{jc}+b_{jc}-1} p(θjc∣D)∝θjcNjc+ajc−1(1−θjc)Nc−Njc+bjc−1
归一化系数:
1 Z θ j c = ∫ 0 1 d θ j c θ j c N j c + a j c − 1 ( 1 − θ j c ) N c − N j c + b j c − 1 = B ( N j c + a j c , N c − N j c + b j c ) \frac{1}{Z_{\theta_{jc}}}= \int_0^1 d\theta_{jc}\,\theta_{jc}^{N_{jc}+a_{jc}-1}(1-\theta_{jc})^{N_c-N_{jc}+b_{jc}-1}= B(N_{jc}+a_{jc},N_c-N_{jc}+b_{jc}) Zθjc1=∫01dθjcθjcNjc+ajc−1(1−θjc)Nc−Njc+bjc−1=B(Njc+ajc,Nc−Njc+bjc)
Beta函数:
B ( x , y ) = Γ ( x ) Γ ( y ) Γ ( x + y ) B(x,y)=\frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} B(x,y)=Γ(x+y)Γ(x)Γ(y)
娱乐算一下均值,后面可能要用:
E [ θ j c ∣ D ] = Z θ j c ∫ 0 1 d θ j c θ j c θ j c N j c + a j c − 1 ( 1 − θ j c ) N c − N j c + b j c − 1 = B ( N j c + a j c + 1 , N c − N j c + b j c ) B ( N j c + a j c , N c − N j c + b j c ) E[\theta_{jc}|D]=Z_{\theta_{jc}}\int_0^1 d\theta_{jc}\,\theta_{jc}\theta_{jc}^{N_{jc}+a_{jc}-1}(1-\theta_{jc})^{N_c-N_{jc}+b_{jc}-1}=\frac{B(N_{jc}+a_{jc}+1,N_c-N_{jc}+b_{jc})}{B(N_{jc}+a_{jc},N_c-N_{jc}+b_{jc})} E[θjc∣D]=Zθjc∫01dθjcθjcθjcNjc+ajc−1(1−θjc)Nc−Njc+bjc−1=B(Njc+ajc,Nc−Njc+bjc)B(Njc+ajc+1,Nc−Njc+bjc)
带入 Γ \Gamma Γ函数的性质:
B ( N j c + a j c + 1 , N c − N j c + b j c ) B ( N j c + a j c , N c − N j c + b j c ) = Γ ( N j c + a j c + 1 ) Γ ( N c − N j c + b j c ) Γ ( N j c + a j c ) Γ ( N c − N j c + b j c ) Γ ( N c + a j c + b j c ) Γ ( N c + a j c + b j c + 1 ) = N j c + a j c N j c + a j c + b j c \frac{B(N_{jc}+a_{jc}+1,N_c-N_{jc}+b_{jc})}{B(N_{jc}+a_{jc},N_c-N_{jc}+b_{jc})}= \frac{\Gamma(N_{jc}+a_{jc}+1)\Gamma(N_c-N_{jc}+b_{jc})}{\Gamma(N_{jc}+a_{jc})\Gamma(N_c-N_{jc}+b_{jc})}\frac{\Gamma(N_c+a_{jc}+b_{jc})}{\Gamma(N_c+a_{jc}+b_{jc}+1)}=\frac{N_{jc}+a_{jc}}{N_{jc}+a_{jc}+b_{jc}} B(Njc+ajc,Nc−Njc+bjc)B(Njc+ajc+1,Nc−Njc+bjc)=Γ(Njc+ajc)Γ(Nc−Njc+bjc)Γ(Njc+ajc+1)Γ(Nc−Njc+bjc)Γ(Nc+ajc+bjc+1)Γ(Nc+ajc+bjc)=Njc+ajc+bjcNjc+ajc
同样算一下共轭的均值(这样是叫共轭吗?):
E [ 1 − θ j c ∣ D ] = E [ 1 ∣ D ] − E [ θ j c ∣ D ] = b j c N j c + a j c + b j c E[1-\theta_{jc}|D]=E[1|D]-E[\theta_{jc}|D]=\frac{b_{jc}}{N_{jc}+a_{jc}+b_{jc}} E[1−θjc∣D]=E[1∣D]−E[θjc∣D]=Njc+ajc+bjcbjc
这样得到的均值也可以作为一个估计值,类似于最大似然估计。
取对数:
ln p ( θ , π ∣ D ) = ln p ( θ ) + ln p ( π ) + ∑ i ( ln p ( x ( i ) ∣ θ ) + ln p ( y ( i ) ∣ π ) ) \ln p(\theta,\pi|D)=\ln p(\theta)+\ln p(\pi)+\sum_i(\ln p(x^{(i)}|\theta)+\ln p(y^{(i)}|\pi)) lnp(θ,π∣D)=lnp(θ)+lnp(π)+i∑(lnp(x(i)∣θ)+lnp(y(i)∣π))
先验对数:
ln p ( θ ) = C o n s t + ( a j c − 1 ) ln θ j c + ( b j c − 1 ) ln ( 1 − θ j c ) , ln p ( π ) = C o n s t + ∑ c ( β c − 1 ) ln π c \ln p(\theta)=Const+(a_{jc}-1)\ln\theta_{jc}+(b_{jc}-1)\ln(1-\theta_{jc}),\ln p(\pi)=Const+\sum_c(\beta_c-1)\ln\pi_c lnp(θ)=Const+(ajc−1)lnθjc+(bjc−1)ln(1−θjc),lnp(π)=Const+c∑(βc−1)lnπc
目标函数:
L ( θ , π ) = ( a j c − 1 ) ln θ j c + ( b j c − 1 ) ln ( 1 − θ j c ) + ∑ c ( β c − 1 ) ln π c + ∑ j ∑ c ∑ i : y ( i ) = c ( x j ( i ) ln θ j c + ( 1 − x j ( i ) ) ln ( 1 − θ j c ) ) + ∑ c N c ln π c − λ ( ∑ c π c − 1 ) L(\theta,\pi)=(a_{jc}-1)\ln\theta_{jc}+(b_{jc}-1)\ln(1-\theta_{jc})+\sum_c(\beta_c-1)\ln\pi_c+\sum_j\sum_c\sum_{i:y^{(i)}=c}(x_j^{(i)}\ln\theta_{jc}+(1-x_j^{(i)})\ln(1-\theta_{jc}))+\sum_cN_c\ln\pi_c-\lambda(\sum_c\pi_c-1) L(θ,π)=(ajc−1)lnθjc+(bjc−1)ln(1−θjc)+c∑(βc−1)lnπc+j∑c∑i:y(i)=c∑(xj(i)lnθjc+(1−xj(i))ln(1−θjc))+c∑Nclnπc−λ(c∑πc−1)
参数 π \pi π:
∂ ∂ π c L ( θ , π ) = β c − 1 π c + N c π c − λ = 0 ⇒ N c + β c − 1 = λ π c \frac{\partial}{\partial \pi_c}L(\theta,\pi)=\frac{\beta_c-1}{\pi_c}+\frac{N_c}{\pi_c}-\lambda=0\Rightarrow N_c+\beta_c-1=\lambda\pi_c ∂πc∂L(θ,π)=πcβc−1+πcNc−λ=0⇒Nc+βc−1=λπc
带入边界条件:
N + ∑ c β c − N D = λ ⇒ π ^ c = N c + β c − 1 N + ∑ c β c − N D N+\sum_c\beta_c-N_D=\lambda\Rightarrow\hat\pi_c=\frac{N_c+\beta_c-1}{N+\sum_c\beta_c-N_D} N+c∑βc−ND=λ⇒π^c=N+∑cβc−NDNc+βc−1
参数 θ \theta θ:
∂ ∂ θ j c L ( θ , π ) = a j c − 1 θ j c − b j c − 1 1 − θ j c + ∑ i : y ( i ) = c ( x j ( i ) θ j c − 1 − x j ( i ) 1 − θ j c ) = N j c + a j c − 1 θ j c − N c − N j c + b j c − 1 1 − θ j c \frac{\partial}{\partial \theta_{jc}}L(\theta,\pi)= \frac{a_{jc}-1}{\theta_{jc}}-\frac{b_{jc}-1}{1-\theta_{jc}}+\sum_{i:y^{(i)}=c}(\frac{x_j^{(i)}}{\theta_{jc}}-\frac{1-x_j^{(i)}}{1-\theta_{jc}})= \frac{N_{jc}+a_{jc}-1}{\theta_{jc}}-\frac{N_c-N_{jc}+b_{jc}-1}{1-\theta_{jc}} ∂θjc∂L(θ,π)=θjcajc−1−1−θjcbjc−1+i:y(i)=c∑(θjcxj(i)−1−θjc1−xj(i))=θjcNjc+ajc−1−1−θjcNc−Njc+bjc−1
求出来:
θ ^ j c = N j c + a j c − 1 N c + a j c + b j c − 2 \hat\theta_{jc}=\frac{N_{jc}+a_{jc}-1}{N_c+a_{jc}+b_{jc}-2} θ^jc=Nc+ajc+bjc−2Njc+ajc−1
设置先验为均匀分布(uninformative),即 a = 1 , b = 1 , β = 1 a=1,b=1,\beta=1 a=1,b=1,β=1,获得和最大似然估计相同的结果!
先验的参数 a , b a,b a,b是超参数,类似于其他模型的「正则」系数,这些参数是人工指定的,不能通过训练模型获得。如果采用最大后验估计作为「训练」的过程,也只需要遍历整个 θ j c \theta_{jc} θjc矩阵、带入 a , b a,b a,b即可。
有了最大似然估计(MLE)或最大后验估计(MAP)的结果 θ ^ j c , π ^ c \hat\theta_{jc},\hat\pi_c θ^jc,π^c,直接带入概率密度函数,就可以求相对的概率大小。
p ( y = c ∣ x ⃗ ) ∝ p ( y = c ) ∏ j p ( x j ∣ y = c ) p(y=c|\vec x)\propto p(y=c)\prod_jp(x_j|y=c) p(y=c∣x)∝p(y=c)j∏p(xj∣y=c)
上式右边不需要得到归一化系数,带入参数估计值,就可以比较 y y y取不同值时候的相对大小。概率最大时对应的分类就是模型的输出。
直接带入最大似然估计(MLE)或最大后验估计(MAP)的结果,都可能造成「过拟合」,并不是有超参数的模型就不会过拟合。「过拟合」只是个相对的概念,以下介绍贝叶斯统计的常用手法,在大多数情况下比直接带入某种估计的结果,都能更好地避免过拟合。当然,这样的计算要复杂很多,在大多数情况下,MLE/MAP就可以满足需求。
预测目标的分布(predictive distribution),像上面一样:
p ( y = c ∣ x ⃗ , D ) ∝ p ( y = c ∣ D ) ∏ j p ( x j ∣ y = c , D ) p(y=c|\vec x,D)\propto p(y=c|D)\prod_jp(x_j|y=c,D) p(y=c∣x,D)∝p(y=c∣D)j∏p(xj∣y=c,D)
「参数空间」就是由参数 θ , π \theta,\pi θ,π张成的空间,微元是它们的概率密度函数加权之后的:
p ( π ∣ D ) p ( θ j c ∣ D ) d π d θ p(\pi|D)p(\theta_{jc}|D)d\pi d\theta p(π∣D)p(θjc∣D)dπdθ
注意到 θ , π \theta,\pi θ,π相互独立,这一个空间可以当成两个空间看待:
p ( π c ∣ D ) d π c , p ( θ j c ∣ D ) d θ j c p(\pi_c|D)d\pi_c,p(\theta_{jc}|D)d\theta_{jc} p(πc∣D)dπc,p(θjc∣D)dθjc
目标的分布的两个部分分别在这两个空间上做积分:
p ( y = c ∣ D ) = ∫ d π p ( y = c ∣ π ) p ( π ∣ D ) , p ( x j ∣ y = c , D ) = ∫ d θ j c p ( x j ∣ y = c , θ j c ) p ( θ j c ∣ D ) p(y=c|D)=\int d\pi\,p(y=c|\pi)p(\pi|D),p(x_j|y=c,D)=\int d\theta_{jc}\, p(x_j|y=c,\theta_{jc})p(\theta_{jc}|D) p(y=c∣D)=∫dπp(y=c∣π)p(π∣D),p(xj∣y=c,D)=∫dθjcp(xj∣y=c,θjc)p(θjc∣D)
计算 π \pi π的空间:
p ( y = c ∣ D ) = ∫ d π π c Z π ∏ c ′ π c ′ N c ′ + β c ′ − 1 = Z π ( ∫ 0 1 d π c π c N c + β c ) ( ∏ c ′ ≠ c ∫ 0 1 d π c ′ π c ′ N c ′ + β c ′ − 1 ) = Z π 1 N c + β c + 1 ∏ c ′ ≠ c 1 N c ′ + β c ′ = 1 − 1 N c + β c + 1 p(y=c|D)=\int d\pi\,\pi_c Z_\pi\prod_{c'}\pi_{c'}^{N_{c'}+\beta_{c'}-1}= Z_\pi(\int_0^1d\pi_c\,\pi_c^{N_c+\beta_c})(\prod_{c'\ne c}\int_0^1d\pi_{c'}\,\pi_{c'}^{N_{c'}+\beta_{c'}-1})= Z_\pi\frac{1}{N_c+\beta_c+1}\prod_{c'\ne c}\frac{1}{N_{c'}+\beta_{c'}}=1-\frac{1}{N_c+\beta_c+1} p(y=c∣D)=∫dππcZπc′∏πc′Nc′+βc′−1=Zπ(∫01dπcπcNc+βc)(c′=c∏∫01dπc′πc′Nc′+βc′−1)=ZπNc+βc+11c′=c∏Nc′+βc′1=1−Nc+βc+11
计算 θ \theta θ的空间:
p ( x j ∣ y = c , D ) = Z θ j c ∫ 0 1 d θ j c θ j c x j ( 1 − θ j c ) 1 − x j θ j c N j c + a j c − 1 ( 1 − θ j c ) N c − N j c + b j c − 1 = B ( x j + N j c + a j c , 1 − x j + N c − N j c + b j c ) B ( N j c + a j c , N c − N j c + b j c ) p(x_j|y=c,D)= Z_{\theta_{jc}}\int_0^1 d\theta_{jc}\,\theta_{jc}^{x_j}(1-\theta_{jc})^{1-x_j}\theta_{jc}^{N_{jc}+a_{jc}-1}(1-\theta_{jc})^{N_c-N_{jc}+b_{jc}-1}= \frac{B(x_j+N_{jc}+a_{jc},1-x_j+N_c-N_{jc}+b_{jc})}{B(N_{jc}+a_{jc},N_c-N_{jc}+b_{jc})} p(xj∣y=c,D)=Zθjc∫01dθjcθjcxj(1−θjc)1−xjθjcNjc+ajc−1(1−θjc)Nc−Njc+bjc−1=B(Njc+ajc,Nc−Njc+bjc)B(xj+Njc+ajc,1−xj+Nc−Njc+bjc)
上式过于庞杂,考虑到 x j x_j xj取值十分有限,可以简化一下,分别计算。
x j = 1 x_j=1 xj=1时,是在求均值,刚才算过了:
p ( x j = 1 ∣ y = c , D ) = ∫ 0 1 d θ j c θ j c p ( θ j c ∣ D ) = E [ θ j c ∣ D ] p(x_j=1|y=c,D)= \int_0^1 d\theta_{jc}\,\theta_{jc}p(\theta_{jc}|D)=E[\theta_{jc}|D] p(xj=1∣y=c,D)=∫01dθjcθjcp(θjc∣D)=E[θjc∣D]
x j = 0 x_j=0 xj=0时,还是在求均值:
p ( x j = 0 ∣ y = c , D ) = ∫ 0 1 d θ j c ( 1 − θ j c ) p ( θ j c ∣ D ) = E [ 1 − θ j c ∣ D ] p(x_j=0|y=c,D)= \int_0^1 d\theta_{jc}\,(1-\theta_{jc})p(\theta_{jc}|D)=E[1-\theta_{jc}|D] p(xj=0∣y=c,D)=∫01dθjc(1−θjc)p(θjc∣D)=E[1−θjc∣D]
简洁地合并以上两种情况:
p ( x j ∣ y = c , D ) = E [ θ j c ∣ D ] I ( x j = 1 ) E [ 1 − θ j c ∣ D ] I ( x j = 0 ) p(x_j|y=c,D)=E[\theta_{jc}|D]^{I(x_j=1)}E[1-\theta_{jc}|D]^{I(x_j=0)} p(xj∣y=c,D)=E[θjc∣D]I(xj=1)E[1−θjc∣D]I(xj=0)
带入连乘:
∏ j p ( x j ∣ y = c , D ) = E [ θ j c ∣ D ] N j 1 E [ 1 − θ j c ∣ D ] N j 0 , N j 1 + N j 0 = N D \prod_jp(x_j|y=c,D)=E[\theta_{jc}|D]^{N_{j1}}E[1-\theta_{jc}|D]^{N_{j0}},N_{j1}+N_{j0}=N_D j∏p(xj∣y=c,D)=E[θjc∣D]Nj1E[1−θjc∣D]Nj0,Nj1+Nj0=ND
这样就完成了所有步骤。最终结果:
p ( y = c ∣ x ⃗ , D ) ∝ p ( y = c ∣ D ) ∏ j p ( x j ∣ y = c , D ) = ( 1 − 1 N c + β c + 1 ) E [ θ j c ∣ D ] N j 1 E [ 1 − θ j c ∣ D ] N j 0 p(y=c|\vec x,D)\propto p(y=c|D)\prod_jp(x_j|y=c,D)=(1-\frac{1}{N_c+\beta_c+1})E[\theta_{jc}|D]^{N_{j1}}E[1-\theta_{jc}|D]^{N_{j0}} p(y=c∣x,D)∝p(y=c∣D)j∏p(xj∣y=c,D)=(1−Nc+βc+11)E[θjc∣D]Nj1E[1−θjc∣D]Nj0
这个概率密度函数要比直接带入MLE/MAP复杂得多,求解过程更是千回百转。然而,算法求解过程依然只需要遍历整个样本矩阵,并带入参数。这就是「朴素」的魅力!