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\),服从伯努利分布。则有
我们要最大化对数似然函数\(l(\phi,\mu_0,\mu_1,\Sigma)=\log{\prod_{i=1}^m{P(x^{(i)},y^{(i)})}}\)。
显然,对数似然函数中的参数可以直接通过统计学的方法得到。
这时,我们对于答案\(y\)的预测就是
\(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\)是条件独立的。
所以有
定义
同样有对数似然函数\(l(\phi_y,\phi(i\mid y=0),\phi(i\mid y=1))=\log{\prod_{i=1}^m{P(x^{(i)},y^{(i)})}}\)
可以计算出
注意到,如果字典中的某一个词语\(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)}}\)
这样我们就算出了没有在样本中出现的特征的概率,并且使用拉普拉斯平滑可以让我们的概率更具有预测性。