Machine Learning Notes Ⅴ

生成学习算法

我们之前学习的算法都属于判别学习算法,它们都是直接对\(P(y\mid x)\)进行建模。

而生成学习算法则是由贝叶斯公式\(P(y=i\mid x)=\frac{P(y=i,x)}{P(x)}=\frac{P(x\mid y=i)\times P(y=i)}{\sum_{j=1}^{k}{P(x\mid y=j)\times P(y=j)}}\)得到。他把\(x,y\)视为两个有关联的随机变量,通过对\(y\)的不同取值下的\(x\)建模来得到\(P(x\mid y=i)\),对\(y\)的直接建模得到\(P(y=i)\),从而计算出计算\(P(y=i\mid x)\)。因为我们必须对不同\(y\)\(x\)分别建模,这就要求\(y\)的取值必须是有限的,所以生成学习算法一般用于分类问题。

高斯判别分析(Gaussian Discriminant Analysismodel)

高斯判别分析是一种生成学习算法,它假设了输入特征\(x \in \mathbb{R}^n\)\(y=i\)的情况下下服从高斯分布\(N(\vec \mu _i,\Sigma)\)
上面的高斯分布属于多维高斯分布,\(N(\mu,\Sigma)\)的概率密度函数定义为$$P(z)=\frac{1}{(2\pi)^{(D/2)} \mid \Sigma\mid ^{1/2}}exp(-\frac12 {(x-\mu)}T\Sigma(x-\mu))$$其中\(\mu\)为均值;\(\Sigma\)为协方差矩阵,有\(\Sigma=E[(x-\mu){(x-\mu)}^T]\)
我们假设原问题\(y\in \lbrace0,1\rbrace\),服从伯努利分布。则有

\[\begin{align*} P(x\mid y=0)&=\frac{1}{(2\pi)^{(D/2)} \mid \Sigma\mid ^{1/2}}exp(-\frac12 {(x-\mu_0)}^T\Sigma^{-1}(x-\mu_0))\\ \\ P(x\mid y=1)&=\frac{1}{(2\pi)^{(D/2)} \mid \Sigma\mid ^{1/2}}exp(-\frac12 {(x-\mu_1)}^T\Sigma^{-1}(x-\mu_1))\\ \\ P(y)&=\phi^y(1-\phi)^{1-y} \end{align*} \]

我们要最大化对数似然函数\(l(\phi,\mu_0,\mu_1,\Sigma)=\log{\prod_{i=1}^m{P(x^{(i)},y^{(i)})}}\)
显然,对数似然函数中的参数可以直接通过统计学的方法得到。

\[\begin{align*} \phi&=\frac{\sum_{i=1}^m{1\lbrace y^{(i)}=1 \rbrace}}{m}\\ \\ \mu_0&=\frac{\sum_{i=1}^m{1\lbrace y^{(i)}=0 \rbrace x^{(i)}}}{\sum_{i=1}^m{1\lbrace y^{(i)}=0 \rbrace}}\\ \\ \mu_1&=\frac{\sum_{i=1}^m{1\lbrace y^{(i)}=1 \rbrace x^{(i)}}}{\sum_{i=1}^m{1\lbrace y^{(i)}=1 \rbrace}} \\ \\ \Sigma&=\frac{\sum_{i=1}^m{(x^{(i)}-\mu_{y^{(i)}}){(x^{(i)}-\mu_{y^{(i)}})}^T}}{m} \end{align*} \]

这时,我们对于答案\(y\)的预测就是

\[\begin{align*} argmax(P(y\mid x))&=argmax(\frac{P(x,y)}{P(x)})\\ &=argmax(\frac{P(x\mid y)P(y)}{P(x\mid y=0)P(y=0)+P(x\mid y=1)P(y=1)})\\ \\ &=argmax(P(x\mid y)P(y)) \end{align*} \]

\(argmax(f(arg))\)的值是使\(f(arg)\)最大的\(arg\)的取值。

(若x,y无关,那么\(P(x\mid y)\)是一个常量,答案就是使\(P(y)\)最大的\(y\)。)

高斯判别分析与Logistic回归
可以证明,若\(x\mid y=1\)\(x\mid y=0\)都属于同一种指数分布族,那么\(P(y=1\mid x)\)是Logistic函数。但这个性质反过来并不成立。可以看出高斯判别分析的假设比Logistic回归更强,所以当\(x\mid y\)满足或近似满足高斯分布时,高斯判别分析需要的样本更少,效果更好。但Logistic回归可以用于大部分情况。

朴素贝叶斯算法(Naive Bayes)

样例问题:区分垃圾邮件
如何提取特征:

  • 首先构建一个词典,对于一个邮件根据字典中的词语是否出现来构建特征向量。

和之前一样,我们要对\(P(x\mid y)\)建模。但由于\(x\)共有\(2^n\)种特定取值,不能直接计算出各种情况的概率。所以我们做出了一个不太合理的假设:给定\(y\)时,\(x_i\)是条件独立的
所以有

\[\begin{align*} P(x_1,x_2,\ldots,x_n\mid y)&=P(x_1\mid y1)P(x_2\mid y,x1)\cdots P(x_n\mid y,x_1,x_2,\ldots,x_{n-1})\\ \\ &=P(x_1\mid y)P(x_2\mid y)\cdots P(x_n\mid y) \end{align*} \]

定义

\[\begin{align*} \phi(i\mid y=1)&=P(x_i=1\mid y=1)\\ \\ \phi(i\mid y=0)&=P(x_i=1\mid y=0)\\ \\ \phi_y&=P(y=1) \end{align*} \]

同样有对数似然函数\(l(\phi_y,\phi(i\mid y=0),\phi(i\mid y=1))=\log{\prod_{i=1}^m{P(x^{(i)},y^{(i)})}}\)
可以计算出

\[\begin{align*} \phi(j\mid y=1)&=\frac{\sum_{i=1}^m{1\lbrace x^{(i)}_j=1,y^{(i)}=1 \rbrace}}{\sum_{i=1}^m{1\lbrace y^{(i)}=1 \rbrace}} \\ \\ \phi(j\mid y=0)&=\frac{\sum_{i=1}^m{1\lbrace x^{(i)}_j=1,y^{(i)}=0 \rbrace}}{\sum_{i=1}^m{1\lbrace y^{(i)}=0 \rbrace}} \\ \\ \phi_y&=\frac{\sum_{i=1}^m{1\lbrace y^{(i)}=1 \rbrace}}m \end{align*} \]

注意到,如果字典中的某一个词语\(x_r\)没有在样本中出现过,那么\(P(x_r\mid y)=0\),那么此时我们求出的\(P(y\mid x)=\frac{P(x,y)}{P(x)}=\frac{0}{0}\),无法计算。
而且即使一个词语\(x_r\)没有在样本中出现过,也并不代表它不会出现,\(P(x_r)\)不应该等于\(0\)。所以这里我们引入拉普拉斯平滑(Laplace Smoothing)的方法:

  • 假如\(y \in \lbrace 1,2,\ldots,k \rbrace\),我们令\(P(y=j)=\cfrac{\sum_{i=1}^m{1\lbrace y^{(i)}=j \rbrace}+1}{\sum_{t=1}^k{\left( \sum_{i=1}^m{1 \lbrace y^{(i)}=t \rbrace} +1 \right)}}\)

这样我们就算出了没有在样本中出现的特征的概率,并且使用拉普拉斯平滑可以让我们的概率更具有预测性。

posted @ 2016-12-04 21:07  LincHpin  阅读(175)  评论(0编辑  收藏  举报