生成学习算法, Generative Learing Algorithm
生成学习算法(Generative Learing Algorithm)
之前的学习方法都是在已知x的情况下求不同y的概率,也就是直接学习P(y∣x),被称为判别学习算法(Discrimative Learning Algorithm)。
这一章反过来考虑数据的生成过程,即P(x∣y)。
贝叶斯告诉我们,这二者实际上是有联系的
P(y∣x)P(x)=P(x∣y)P(y)=P(x,y)
现在还是已知x,求y,反过来即
yargmaxP(x∣y)=yargmaxP(y)P(y∣x)P(x)=yargmaxP(y)P(y∣x)
argmaxy即求这个式子达到最大时对应的y
怎么理解这里的y∣x和y的区别,即有没有先验呢?
y∣x意思是看完了x的所有“细节”再来求y的概率,y只没有看x的具体细节求概率,比如伯努利分布,直接用频率来估计P(y),当然后面也一般都是用频率来直接估计某些概率。
多元正态分布
如果x不只是一个实数,而是一个向量Rd,下面来拓展正态分布
P(x;μ,Σ)=(2π)2d∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
这里μ∈Rd,表示x的均值,即每个维度的元素就是该维度上x的均值。Σ∈Rd×d是一个新概念,协方差矩阵,Σi,j表示x第i,j个元素的协方差
cov(X,Y)=E((X−μX)(Y−μY))=E(XY)−μXμY=E(XY)−E(X)E(Y)ρX,Y=σXσYcov(X,Y)
ρ是相关系数,表示两个变量之间的线性相关关系。
所以协方差矩阵实际上就是方差的拓展,i=j,Σi,j就是方差,i=j,Σi,j就是协方差,即衡量两个维度的线性相关关系。
需要注意的是,cov(X,Y)=0虽然表示完全没有线性关系,但是不一定相互独立;相互独立一定协方差为0。
比如Y=X2,x∼N(0,1),cov(X,Y)=E(X3)=0。
协方差矩阵形式化的定义是
cov(Z)=E((Z−μ)(Z−μ)T)=E(ZZT)+μμT−E(ZμT+μZT)=E(ZZT)−μμT
最后一个等号,可以直接考虑ZμT,μZT矩阵乘法的具体结果得到。
二维情况的直观理解直接看讲义。
高斯判别分析(GDAM)
一个每个维度都连续的向量x,进行二分类0,1。
用我们之前提到的生成学习算法的思想来处理。
先做如下分布假设
y∼Bernouli(ϕ),P(y)=ϕy(1−ϕ)1−yx∣y=0∼N(μ0,Σ),P(x;μ0,Σ)=(2π)2d∣Σ∣211exp(−21(x−μ0)TΣ−1(x−μ0))x∣y=1∼N(μ1,Σ),P(x;μ1,Σ)=(2π)2d∣Σ∣211exp(−21(x−μ1)TΣ−1(x−μ1))
还是做极大似然估计来确定参数
L(θ)=i=1∏nP(y(i),x(i))l(θ)=i=1∑nlnP(x(i)∣y(i))P(y(i))l(θ)=i=1∑nlnP(x(i)∣y(i))+i=1∑nlnP(y(i))
为什么前面的线性回归的似然函数是P(y∣x),这里就是P(y,x)呢?
因为我们要考虑事件的生成,要考虑一个过程而非只是结果。
更唯象一点地说,要不然求不出来ϕ
然后代入,再分别对ϕ求导,对μ0,μ1求偏导,对Σ进行矩阵求导,可以得到
ϕ=n∑i=1n[y(i)=1]μ0=∑i=1n[y(i)=0]∑i=1n[y(i)=0]x(i)μ1=∑i=1n[y(i)=1]∑i=1n[y(i)=1]x(i)∑=n∑i=1n(x(i)−μy(i))(x(i)−μy(i))T
实际上,GDA和逻辑回归也是可以关联到一起的,即GDA可以写成
P(y=1∣x;μ0,μ1,Σ,ϕ)=1+e−θTx−θ01P(y=1∣x)P(x)=P(x∣y=1)P(y=1)P(y=1∣x)=P(x∣y=0)P(y=0)+P(x∣y=1)P(y=1)P(x∣y=1)P(y=1)P(y=1∣x)=1+P(x∣y=1)P(y=1)P(x∣y=0)P(y=0)1
然后最终结果是
θ=Σ−1(μ1−μ0)θ0=ln(1−ϕϕ)+21μ0TΣ−1μ0−21μ1TΣ−1μ1
但是可以看到,GDA对分布的假设是更强的——逻辑回归只需要假设伯努利分布。优势是在足够符合多元正态分布的情况,GDA是最渐进有效的,在所有模型中效果是最好的;劣势是如果没那么符合预定的分布,那情况就很糟了。
但是,还是有一些技巧,能把分布改造成类似正态分布的分布,比如box-cox
朴素贝叶斯
之前的GDA是考虑不同的分类下,相应的x的分布,但是假设太强了。还是要解决向量的二分类问题,下面考虑怎么放松这个假设。GDA考虑x的生成的思想不变,只考虑放松x的分布。
回到一元的正态分布,充分统计量是均值和方差,我们想,能不能延续这个思想,多元的情况下还是分别考虑每个变量的均值和方差?
也就是说,每一维的“地位”是相同的,也就是说,每一维之间没有约束。
那就能得出很简洁的分布的假设了:x每一维相互独立,或者总的来说,x∣y=1/0每一维条件独立。这个被称为朴素贝叶斯假设(Naive Bayes Assumption)。
P(x1,x2,...,xd∣y)=P(x1∣y)P(x2∣y)...P(xd∣y)
如果x连续,那每一维都单独符合一个正态分布;如果x离散,那每一维就单独符合一个伯努利分布。下面我们考虑每一维都是0/1。
换句话说,近似于Σ变成了对角矩阵。
通常来讲,这个假设还是太强了,但是实际应用中效果通常不错。
比如垃圾邮件分类问题,每一维表示编码一个单词,0/1表示单词是否出现。通常单词不可能是完全没有联系的。
感性理解,朴素贝叶斯没有太强的假设,所以不会过拟合;很多时候并不是不同维之间的依赖关系决定了分类的结果,比如出现了“免费”之类的字眼就可以断定是垃圾邮件,决定因素并不是维度之间的依赖关系。
参数就是
ϕy=P(y=1),ϕj∣y=0=P(xj=1∣y=0),ϕj∣y=1=P(xj=1∣y=1)
L(θ)=i=1∏nP(x(i),y(i))l(θ)=i=1∑nln(P(x(i)∣y(i))P(y(i)))
推推推,得到
ϕy=n∑i=1n[y(i)=1]ϕj∣y=0=∑i=1n[y(i)=0]∑i=1n[xj(i)=1,y(i)=0]ϕj∣y=1=∑i=1n[y(i)=1]∑i=1n[xj(i)=1,y(i)=1]P(y=1∣x)=P(x∣y=1)P(y=1)+P(x∣y=0)P(y=0)P(x∣y=1)P(y=1)P(y=1∣x)=P(y=1)∏j=1nP(xj∣y=1)+P(y=0)∏j=1nP(xj∣y=0)P(y=1)∏j=1nP(xj∣y=1)
然后就可以预测了。
对于回归问题,看起来朴素贝叶斯很难处理?
可以把值域离散成一段一段变成分类问题来做。
拉普拉斯平滑
回到垃圾短信分类问题,如果新短信中出现了训练集没有的词
ϕk∣y=1=ϕk∣y=0=0
在计算时分子分母就都是0。
如果相应处理这种情况,但仍保持概率和为1,就要从一些比较大的概率里面拿一部分分给零概率的。
所谓的拉普拉斯平滑就是这样的方法,假设现在要直接用频率估计概率,z=1,2,...,k,ϕj=P(z=j)
ϕj=n∑i=1n[z(i)=j]ϕj′=n+k1+∑i=1n[z(i)=j]
可以发现仍能保持概率和为1。
回到垃圾短信分类问题
ϕj∣y=t=2+∑i=1n[y(i)=t]1+∑i=1n[xj(i)=1,y(i)=t]
只做了很小的改动,所以可以认为对整体没什么影响。
文本分类的事件模型
从另一个角度来看,朴素贝叶斯背后的动力学过程相当于先决定邮件是不是垃圾邮件,然后再决定每个词是否出现。被称作伯努利事件模型。
只考虑出现与否有一点粗糙,加强为考虑出现的顺序。这里的独立性改成,每个单词出现在任意位置的概率都相同,不受出现位置和其他位置的单词的影响。
需要的参数是
ϕk∣y=0,ϕk∣y=1,ϕy
ϕk∣y表示任意位置上出现单词k的概率。
L=i=1∏nP(x(i),y(i))=i=1∏nP(y(i))j=1∏diP(xj(i)∣y(i))
极大似然估计出
ϕk∣y=0=∑i=1n[y(i)=0]di∑i=1n∑j=1di[xj(i)=k,y(i)=0]ϕk∣y=1=∑i=1n[y(i)=1]di∑i=1n∑j=1di[xj(i)=k,y(i)=1]ϕy=n∑i=1n[y(i)=1]
使用拉普拉斯平滑
ϕk∣y=0′=∣V∣+∑i=1n[y(i)=0]di1+∑i=1n∑j=1di[xj(i)=k,y(i)=0]ϕk∣y=1′=∣V∣+∑i=1n[y(i)=1]di1+∑i=1n∑j=1di[xj(i)=k,y(i)=1]
其中∣V∣是单词总数。