1. 程式人生 > >1.15 Generative Learning Algorithm:GDA and Mixture of Gaussians/GMM

1.15 Generative Learning Algorithm:GDA and Mixture of Gaussians/GMM

1. 生成學習演算法(Generative Learning Algorithm)與判別學習演算法(Discriminative Learning  Algorithm):

之前涉及到的迴歸類模型就是DLA的一類,是直接對\large p(y|x)建模的。更詳細一點的說,沒有使用正則化的模型是對\large p(y|X;\theta)

建模,\large \theta是一個引數。而使用了正則化的模型則是對\large p(y|X,\theta)=p(y|X,\theta)=p(y|(X,\theta))p(\theta)建模。

而GLA則是對\large p(x|y)建模,以分類問題為例,生成學習通過對不同類的特徵建模,得到\large p(x)=\sum_{i=1}^{k}p(x|y_i)p(y_i)

利用貝葉斯公式:\large p(y|x)=\frac{p(x|y)p(y)}{p(x)}進行分類。

現在我學到的生成學習分類演算法有兩類:GDA(高斯判別分析)和Naive Bayes(樸素貝葉斯)。

當類別標記不知道時,即未觀測,分類問題就是一個聚類問題。將未被觀測到的類標記當成隱隨機變數(latent random variable),通過EM演算法,就可以求解聚類問題。這篇部落格記錄了分類問題下GDA以及用於分類高斯混合模型。

2.GDA:二分類:

(1)

模型假設:\large y \sim B(\phi) \\ x|y=0 \sim N(\mu_0,\Sigma )\\ x|y=1\sim N(\mu_1,\Sigma),對應的分佈為:\large p(y)=\phi^y(1-\phi)^{1-y}\\p(x|y=0)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0))\\ p(x|y=1)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1))

因為\large \phi也是未知量,所以直接對聯合分佈\large p(x,y)進行極大似然估計,得到對數似然函式為:\large l(\phi,\mu_0,\mu_1,\Sigma)=log\prod_{i=1}^{m}p(x^i,y^i;\phi,\mu_0,\mu_1,\Sigma)=\large log\prod_{i=1}^{m}p(x^i|y^i;\mu_0,\mu_1,\Sigma)p(y^i;\phi)

估計,\large \Sigma時,和其他自變數無關,所以有些項是不用關心的。通過求導,

估計出來的結果是:

\large \phi = \frac{1}{m}\sum_{i=1}^{m}1\begin{Bmatrix} y_i=1 \end{Bmatrix}\ ,\mu_0 = \frac{\sum_{i=1}^{m}1\begin{Bmatrix} y^i=0 \end{Bmatrix}x^i}{\sum_{i=1}^{m}1\begin{Bmatrix} y^i=0 \end{Bmatrix}}\\\mu_1= \frac{\sum_{i=1}^{m}1\begin{Bmatrix} y^i=1 \end{Bmatrix}x^i}{\sum_{i=1}^{m}1\begin{Bmatrix} y^i=1 \end{Bmatrix}} ,\Sigma = \frac{1}{m}\sum_{i=1}^{m}(x^i-\mu_{y^i})(x^i-\mu_{y^i})^T

(2)與Logistic Regression的對比:

logistic regression有著更弱的假設,而高斯判別分析需要假設更強一些。

(3)多分類高斯判別分析:

令z表示類標記,有:\large l(\theta,\mu,\Sigma)=\sum_{i=1}^{m}log(p(x^i|z^i;\mu,\Sigma)+log(p(z^i;\phi))

最終結果如下:\large \phi_j = \frac{1}{m}\sum_{i=1}^{m}1\begin{Bmatrix} z^i=j \end{Bmatrix}\ ,\mu_j = \frac{\sum_{i=1}^{m}1\begin{Bmatrix} z^i=j\end{Bmatrix}x^i}{\sum_{i=1}^{m}1\begin{Bmatrix} z^i=j \end{Bmatrix}}\\ \Sigma_j = \frac{\sum_{i=1}^{m}1\begin{Bmatrix} z^i=j \end{Bmatrix}(x^i-\mu_j)(x^i-\mu_j)^T}{\sum_{i=1}^{m}1\begin{Bmatrix} z^i=j \end{Bmatrix}}

PS:這裡有一個問題就是:為什麼二分類時 用的是一個\large \Sigma,但是多分類時,有多少個類就要算多少個\large \Sigma

3.Mixture of Gaussians:

對於混合高斯用於聚類,需要知道EM演算法的相關知識,見1.16

優化問題同1中(3)所記錄的:\large l(\theta,\mu,\Sigma)=\sum_{i=1}^{m}log(p(x^i|z^i;\mu,\Sigma)+log(p(z^i;\phi))

但是因為z是一個隱變數,所以直接計算比較困難,所以使用EM迭代計算。演算法推導還沒完全搞懂,這裡不記錄。

演算法流程如下:

Repeat until convergence{

 E-step: For each i,j,set \large w_j^i=Q_i(z^i)=p(z^i=j|x^i;\phi,\mu,\Sigma)=\frac{p(x^i|z^i=j;\mu,\Sigma)p(z^i=j;\phi)}{\sum_{l=1}^{k}p(x^i|z^i=l;\mu,\Sigma)p(z^i=l;\phi)}

M-step: Set \large \phi_j = \frac{1}{m}\sum_{i=1}^{m}w_j^i ,\\\mu_j = \frac{\sum_{i=1}^{m}w_j^ix^i}{\sum_{i=1}^{m} w_j^i} \\\Sigma_j = \frac{\sum_{i=1}^{m}w^i_j(x^i-\mu_j)(x^i-\mu_j)^T}{\sum_{i=1}^{m}w_j^i}

}