生成学习算法
我们之前学习的算法都属于判别学习算法,它们都是直接对(P(ymid x))进行建模。
而生成学习算法则是由贝叶斯公式(P(y=imid x)=frac{P(y=i,x)}{P(x)}=frac{P(xmid y=i) imes P(y=i)}{sum_{j=1}^{k}{P(xmid y=j) imes P(y=j)}})得到。他把(x,y)视为两个有关联的随机变量,通过对(y)的不同取值下的(x)建模来得到(P(xmid y=i)),对(y)的直接建模得到(P(y=i)),从而计算出计算(P(y=imid 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}{(2pi)^{(D/2)} mid Sigmamid ^{1/2}}exp(-frac12 {(x-mu)}TSigma{-1}(x-mu))$$其中(mu)为均值;(Sigma)为协方差矩阵,有(Sigma=E[(x-mu){(x-mu)}^T])。
我们假设原问题(yin lbrace0,1
brace),服从伯努利分布。则有
我们要最大化对数似然函数(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(xmid y))是一个常量,答案就是使(P(y))最大的(y)。)
高斯判别分析与Logistic回归
可以证明,若(xmid y=1)与(xmid y=0)都属于同一种指数分布族,那么(P(y=1mid x))是Logistic函数。但这个性质反过来并不成立。可以看出高斯判别分析的假设比Logistic回归更强,所以当(xmid y)满足或近似满足高斯分布时,高斯判别分析需要的样本更少,效果更好。但Logistic回归可以用于大部分情况。
朴素贝叶斯算法(Naive Bayes)
样例问题:区分垃圾邮件
如何提取特征:
- 首先构建一个词典,对于一个邮件根据字典中的词语是否出现来构建特征向量。
和之前一样,我们要对(P(xmid y))建模。但由于(x)共有(2^n)种特定取值,不能直接计算出各种情况的概率。所以我们做出了一个不太合理的假设:给定(y)时,(x_i)是条件独立的。
所以有
定义
同样有对数似然函数(l(phi_y,phi(imid y=0),phi(imid y=1))=log{prod_{i=1}^m{P(x^{(i)},y^{(i)})}})
可以计算出
注意到,如果字典中的某一个词语(x_r)没有在样本中出现过,那么(P(x_rmid y)=0),那么此时我们求出的(P(ymid 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 brace),我们令(P(y=j)=cfrac{sum_{i=1}^m{1lbrace y^{(i)}=j brace}+1}{sum_{t=1}^k{left( sum_{i=1}^m{1 lbrace y^{(i)}=t brace} +1 ight)}})
这样我们就算出了没有在样本中出现的特征的概率,并且使用拉普拉斯平滑可以让我们的概率更具有预测性。