机器学习-高斯判别分析

在前面的博文中,我们介绍了线性判别分析用于分类,在这篇博文中,我们介绍高斯判别分析。高斯判别分析也是一种用于分类的方法,在样本数据服从多元高斯分布以及类别标签\(y\)服从伯努利分布的假设条件下,然后再由贝叶斯公式求出一个新样本分别属于两类别的概率。

对于给定的数据集\(D=\{(x_1,y_1),\cdots,(x_N,y_N)\}\),其中\(y_=\{1,0\}\)。根据假设\(y_i\)服从伯努利分布,那么有如下公式成立

\[p(y)=\phi^y(1-\phi)^{1-y} \]

其中\(\phi\)表示$y_i=$0的概率值。另外两类样本数据集均服从高斯分布,且方差一样。那么可以将两个类别表示成如下

\[x|y=1 \sim N(u_1, \Sigma)\\ x|y=0 \sim N(u_2,\Sigma) \]

那么综合表达这两类样本成

\[p(x|y)=[N(u_1,\Sigma)]^y[N(u_2, \Sigma)]^{1-y} \]

接下来的目标就是在目标准则下,求得高斯分布的参数,包括\(\theta=(\phi,u_1,u_2,\Sigma)\)。首先定义似然函数

\[L(\theta)= \log\Pi_{i=1}^{N}p(x_i,y_i) \]

然后利用贝叶斯公式

\[p(x,y)=p(x|y)p(y) \]

进而可以将似然函数表示成

\[L(\theta)=\log \Pi_{i=1}^{N}[p(x_i|y_i)p(y_i)]\\ \sum_{i=1}^{N}(\log p(x_i|y_i)+\log p(y_i)) \]

那么参数\(\theta\)可以通过最大化\(L(\theta)\)得到

\[\hat{\theta}=\arg \max_{\theta} L(\theta)\\ =\arg \max_\theta \sum_{i=1}^{N}[\log N(u_1,\Sigma)^{y_i} + \log N(u_2,\Sigma)^{1-y_i}+log(\phi^{y_i}(1-\phi)^{1-y_i})] \]

  • \(\phi\)

可以看到\(\phi\)只与后两项有关,让\(L(\theta)\)\(\phi\)求偏导,可以得到

\[\frac{\partial L(\theta)}{\partial{\phi}}=\sum_{i=1}^{N}y_{i} \frac{1}{\phi}+(1-y_i)(-1)\frac{1}{1-\phi}=0 \]

很容易得到

\[\phi = \frac{1}{N}\sum_{i=1}^{N}y_i \]

  • \(u_1,u_2\)

\(u_1\)的求解过程和\(u_2\)类似,因此只介绍求解\(u_1\)的过程。从\(L(\theta)\)的表达式可以知道\(u_1,u_2\)只与前两项有关系,首先让\(L(\theta)\)\(u_1\)求偏导,得到

\[\frac{\partial{L(\theta)}}{\partial{u_1}}=\sum_{i=1}^{N}y_i\log\frac{1}{(2\pi)^{p/2}\lvert\Sigma\lvert^{\frac{1}{2}}}e^{-\frac{1}{2}(x_i-u_1)^T\Sigma^{-1}(x_i-u_1)} \]

由于中间的分数项是一个常数,那么\(u_1\)的求解可以转成如下优化问题

\[\hat{u}_1=\arg \max_{u_1} \sum_{i=1}^{N} y_i[-\frac{1}{2}(x_u-u_1)^T\Sigma^{-1}(x_i-u_1)] \]

重新定义目标函数\(l(u_1)\)如下

\[l(u_1)=-\frac{1}{2}\sum_{i=1}^{N}y_i(x_i-u_1)^T\Sigma^{-1}(x_i-u_1)\\ -\frac{1}{2}\sum_{i=1}^{N}y_i[x_i^{T}\Sigma^{-1}x_i-2x_{i}^{T}\Sigma^{-1}u_1+u_1^{T}\Sigma_{-1}u_1] \]

上式对\(u_1\)求偏导,得到

\[\frac{\partial{l(u_1)}}{\partial{u_1}}=\sum_{i=1}^{N}y_i[\Sigma^{-1}x_i-\Sigma^{-1}u_1]=0\\ \rightarrow \hat{u}_1=\frac{\sum_{i=1}^{N}x_iy_i}{\sum_{i=1}^{N}y_i}=\frac{\sum_{i=1}^{Nx_iy_i}}{N_1} \]

同理可得

\[\hat{u}_2=\frac{\sum_{i=1}^{N}x_iy_i}{N_2} \]

  • \(\Sigma\)求解

    为了求得\(\Sigma\),我们首先将数据集分块,分成\(c_1=\{x_i|y_i=1\}\)\(c_2=\{x_i|y_i=0\}\)其中\(c_1\)中的样本个数为\(N_1\),样本数据集\(c_2\)中的样本个数为\(N_2\)。而\(\Sigma\)可以通过如下优化问题求解

    \[\hat{\Sigma}=\arg \max_{\Sigma} \sum_{i=1}^{N} y_i\log N(u_1, \Sigma )+(1-y_i)\log N(u_2, \Sigma)\\ =\arg \max_{\Sigma} \sum_{x_i \in c_1}\log (N(u_1, \Sigma)) + \sum_{x_i \in c_2} \log (N(u_2, \Sigma)) \]


至此已经完成了高斯判别分析中的所有的参数估计。

posted @ 2020-04-29 10:56  Tingwei_chen  阅读(646)  评论(0编辑  收藏  举报