如果在我们的分类问题中,输入特征$x$是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了。
以二分类问题为例进行说明,模型建立如下:
- 样本输入特征为(xinmathbb{R}^n),其类别(yin{0,1});
- 样本类别(y)服从参数为(phi)的伯努力分布,即(ysim Bernoulli(phi));
- 两类样本分别服从不同的高斯分布,即(x|y=0simmathcal{N}(mu_0,Sigma),x|y=1simmathcal{N}(mu_1,Sigma));
对应的概率分布形式如下:
egin{equation}
p(y)=phi^y(1-phi)^{1-y}
end{equation}
egin{equation}
p(x|y=0)=frac{1}{(2pi)^{frac{n}{2}}|Sigma|^{frac{1}{2}}}exp(-frac{1}{2}(x-mu_0)^TSigma^{-1}(x-mu_0))
end{equation}
egin{equation}
p(x|y=1)=frac{1}{(2pi)^{frac{n}{2}}|Sigma|^{frac{1}{2}}}exp(-frac{1}{2}(x-mu_1)^TSigma^{-1}(x-mu_1))
end{equation}
egin{equation}
p(x|y)=frac{1}{(2pi)^{frac{n}{2}}|Sigma|^{frac{1}{2}}}exp(-frac{1}{2}(x-mu_y)^TSigma^{-1}(x-mu_y))
end{equation}
我们模型的参数包括(phi,mu_0,mu_1,Sigma)。这里的两个高斯分布具有不同的均值(mu_0)和(mu_1),但在实际应用中一般取相同的方差(Sigma)。
给定包含(m)个样本的训练集(mathcal{S}={(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),cdots,(x^{(m)},y^{(m)})}),似然函数形式如下:
egin{equation}
egin{array}{ll}
&quadmathcal{L}(phi,mu_0,mu_1,Sigma)\
&=logprod_{i=1}^m p(x^{(i)},y^{(i)};phi,mu_0,mu_1,Sigma)\
&=logprod_{i=1}^m p(x^{(i)}|y^{(i)};mu_0,mu_1,Sigma)p(y^{(i)};phi)\
&=sum_{i=1}^mlog p(x^{(i)}|y^{(i)};mu_0,mu_1,Sigma)+log p(y^{(i)};phi)\
&=sum_{i=1}^mleft[-frac{1}{2}(x^{(i)}-mu_{y^{(i)}})^TSigma^{-1}(x^{(i)}-mu_{y^{(i)}})
ight.\
&quadleft.-frac{n}{2}log(2pi)-frac{1}{2}log|Sigma^{-1}|+y^{(i)}logphi
ight.\
&quadleft.+(1-y^{(i)})log(1-phi)
ight]
end{array}
end{equation}
通过最大似然进行参数估计,用似然函数(mathcal{L})对各个参数求偏导:
egin{equation}
egin{array}{ll}
&quadfrac{partialmathcal{L}(phi,mu_0,mu_1,Sigma)}{partialphi}\
&=frac{partial}{partialphi}sum_{i=1}^mleft[y^{(i)}logphi+(1-y^{(i)})log(1-phi)
ight]\
&=sum_{i=1}^mfrac{y^{(i)}}{phi}-frac{1-y^{(i)}}{1-phi}\
&=sum_{i=1}^mfrac{y^{(i)}-phi}{phi(1-phi)}=0\
&Rightarrow phi=frac{sum_{i=1}^my^{(i)}}{m}=frac{sum_{i=1}^m1{y^{(i)}=1}}{m}
end{array}
end{equation}
egin{equation}
egin{array}{ll}
&quadfrac{partialmathcal{L}(phi,mu_0,mu_1,Sigma)}{partialmu_0}\
&=frac{partial}{partialphi}sum_{i=1}^mleft[-frac{1}{2}1{y^{(i)}=0}(x^{(i)}-mu_{0})^TSigma^{-1}(x^{(i)}-mu_{0})
ight]\
&=frac{partial}{partialmu_0}sum_{i=1}^m-frac{1}{2}1{y^{(i)}=0}\
&quadcdot Tr[mu_0^TSigma^{-1}mu_0-mu_0^TSigma^{-1}x^{(i)}-(x^{(i)})^TSigma^{-1}mu_0]\
&=sum_{i=1}^m1{y^{(i)}=0}Sigma^{-1}(x^{(i)}-mu_0)=0\
&Rightarrow mu_0=frac{sum_{i=1}^m1{y^{(i)}=0}x^{(i)}}{sum_{i=1}^m1{y^{(i)}=0}}
end{array}
end{equation}
同理,可得
egin{equation}
mu_1=frac{sum_{i=1}^m1{y^{(i)}=1}x^{(i)}}{sum_{i=1}^m1{y^{(i)}=1}}
end{equation}
egin{equation}
egin{array}{ll}
&quadfrac{partialmathcal{L}(phi,mu_0,mu_1,Sigma)}{partialSigma}\
&=frac{partial}{partialSigma}[-frac{1}{2}(x^{(i)}-mu_{y^{(i)}})^TSigma^{-1}(x^{(i)}-mu_{y{(i)}})-frac{1}{2}log|Sigma|]\
&=sum_{i=1}^mfrac{1}{2}[left(Sigma^{-1}(x^{(i)}-mu_{y^{(i)}})(x^{(i)}-mu_{y^{(i)}})^TSigma^{-1}
ight)^T-(Sigma^{-1})^T]\
&=frac{1}{2}sum_{i=1}^m(x^{(i)}-mu_{y^{(i)}})(x^{(i)}-mu_{y^{(i)}})^T-Sigma=0\
&Rightarrow Sigma=frac{1}{m}(x^{(i)}-mu_{y^{(i)}})(x^{(i)}-mu_{y^{(i)}})^T
end{array}
end{equation}
仔细分析一下估计出的四个参数,我们会发现$phi$就是在训练集上统计出的(y=1)的样本出现的概率,(mu_0)和(mu_1)则分别为两类样本各自的均值,(Sigma)为整个训练集上的样本方差。
有了这些参数,我们怎样进行预测呢?这就很简单了,将各参数带入(p(x|y))和(p(y)),利用(p(x|y)p(y)=p(x,y))可导出联合概率,我们取使联合概率(p(x,y))最大的类别(y)即可
egin{equation}
underset{yin{0,1}}{argmax}{;p(x|y)p(y)}
end{equation}
最后,我们来分析高斯判别模型和Logistic回归之间的情缘。如果(x|y)服从高斯分布(mathcal{N}(mu,Sigma))(只针对(y)取两个离散值的情况),则(p(y|x))具有logistic函数的形式;反过来,(p(y|x))形式上为logistic函数并不能说明(x|ysimmathcal{N}(mu,Sigma))。实际上,有很多组假设都能使(p(y|x))有logistic函数的形式,只要假设满足(x|y)服从指数族分布(Exponential Family Distribution)。例如,(x|y=0sim Poisson(lambda_0))和(x|y=1sim Poisson(lambda_1)),则(p(y|x))在形式上同样为logistic函数。以高斯判别分析为例,简单证明一下:
egin{equation}
egin{array}{ll}
&p(y=1|x)\
=&frac{p(x|y=1)p(y=1)}{p(x|y=1)p(y=1)+p(x|y=0)p(y=0)}\
=&frac{expleft(-frac{1}{2}(x-mu_1)^TSigma^{-1}(x-mu_1)
ight)phi}{expleft(-frac{1}{2}(x-mu_1)^TSigma^{-1}(x-mu_1)
ight)phi+expleft(-frac{1}{2}(x-mu_0)^TSigma^{-1}(x-mu_0)
ight)(1-phi)}\
=&frac{1}{1+expleft(frac{1}{2}(x-mu_1)^TSigma^{-1}(x-mu_1)-frac{1}{2}(x-mu_0)^TSigma^{-1}(x-mu_0)
ight)frac{1-phi}{phi}}\
=&frac{1}{1+expleft(x^TSigma^{-1}(mu_0-mu_1)+frac{1}{2}mu_1^TSigma^{-1}mu_1-frac{1}{2}mu_0^TSigma^{-1}mu_0+log(1-phi)-logphi
ight)}
end{array}
end{equation}
高斯判别分析在建模时提出了很强的假设,那就是各个类别的数据服从高斯分布。当建模的假设近似正确时,高斯判别分析对数据的应用更高效,因为模型知道数据服从高斯分布,并且直接获取了高斯分布的均值和方差,因此在数据量较少的情形下能有较好效果。如果数据的实际分布与假设相悖时,效果往往会比较差。Logistic回归做出的模型假设相比之下很弱,因此对模型的假设具有更好的鲁棒性。举个例子,如果数据呈现的不是高斯分布而是Poisson分布,但是我们仍然假设(x|y)服从高斯分布,这时logistic回归的性能仍然会很好。原因很简单,不管(x|y)是服从高斯分布还是Poisson分布,(p(y=1|x))最终都可以简化成logistic函数的形式。但如果我们采用GDA在非高斯分布的数据上用高斯模型拟合,就无法保证能取得较好的结果。在我们不确定(x|y)的概率分布的情况下,用logistic回归更稳妥,也是基于这个原因,logistic回归实际上用得更多一些。
以下是GDA相关实验的一个小Demo截图和简要说明,实验代码在这里下载。实验中用两个均值不同但方差相同的高斯模型随机生成了400个1维的样本点,其中两类样本之比为(3:2),而且两类样本见存在重叠;将整个数据集拆分成容量为(9:1)的两部分,前者作为训练集,后者作为测试集。横坐标上的蓝色和绿色点表示两类样本;蓝色和绿色曲线标明了整个训练集属于两类的概率;红色曲线则表明了(p(y=1|x))的值,从实验角度证明(p(y=1|x))形式上为logistic函数。在生成下图的这次运行实例中,正确分类率为(0.975)。