之前我们介绍的分类算法,包括,logistic regression,PLA甚至加上linear
regression,他们都是试图找到一条线然后来将两种类别分开。这种算法叫做Discriminative
Learning
Algorithm,他们的由来,都是直接去估计,这样的话根据新样本的X,从而预测Y。
接下来我们想介绍的是另外一种思路来解决分类问题。我们不再直接估计,而是估计.也就是,我们希望从当前的样本中学到X的特征看上去应该是什么样子,从鸡的样本中学到鸡的样子,从狗的样本中学到狗的样子。这样的算法叫做Generative
Learning
Algorithm(生成学习算法)。当然,我们最后要知道的还是,不过根据Bayes理论可以知道:
我们知道:
所以我们真正需要解决的是.
当然,如果想要求得P(X),可以通过全概率公式:.
下面介绍两个最常见的生成学习算法:Gaussian Discriminant
Analysis(高斯判别分析)与Naive Beyas(朴素贝叶斯模型)。
Gaussian Discriminate
Analysis
高斯判别模型主要用于输入是连续的时候,也就是X的特征值是属于实数集的。首先来复习一下多维高斯分布模型,它是高斯判别模型的基础:
一般来说,多维高斯分布简写为:X N(,). *
是平均向量。 *
是协方差矩阵。是对称的SPD(
symmetric and positive definite matrix).
它的概率密度函数如下:
均值和协方差对分布有什么影响?利用一个二维的向量来说的话,有下面几张图可以看看:

这三张图分别对应着协方差矩阵为的情况。其中
.

从上图又可以看出来,协方差矩阵非对角线的数字变化的时候,对它的图形似乎扭向一边了。实际上这代表了两个特征间的相关程度。

最后一个就是的变化,很显而易见,图形的中心改变了。
现在假如有一个分类问题,其中,利用高斯判别模型的话,我们会有以下假设:
$$
y\tilde{} Bernuolli(\Phi)\\
p(x|y=0)\tilde{}N(\mu_0,\Sigma)\\
p(x|y=1)\tilde{}N(\mu_1,\Sigma)
$$
从上面看出来,我们对于两个模型的生成采用的不一样,但是一样,这样不光保证了两个模型的形状一样,简化了计算过程,最后可以用它们接触点的切线来当做分割线,从而实现与之前Discriminative学习算法的比较。
Note:现在n为向量的维度,而m为样本个数。
和往常一样,我们求它的log极大似然估计:
上述的式子中的参数取值如下: $$
\Phi = \frac 1 m \sum_ {i=1}^m \mathbf{1}\{ y_i = 1\}\\
\mu_b = \frac{\sum_ {i=1}^m \mathbf{1}\{y_i=b\}X_i}{\sum_ {i=1}^m
\mathbf{1}\{y_i=b\} },b=0,1\\
\Sigma = \frac 1 m \sum_ {i=1}^m(X_i - \mu_ {y_i})(X_i - \mu_ {y_i})^T
$$
我们希望生成的模型如下:

如果画等高线图:

我们会发现找到一条线,它属于0或者1的概率是相等的。因此我们就找到了这条线。
GDA与Logistic Regression
在上面的推导过程中我们发现:
上式中:.
如果还记得上次讲过的exponential
family,我们应该知道对于伯奴利分布的canonical
link funtion是
.
因此
这意味着:如果,则是logistic
function.但是从logistic regression是无法推出来GDA的。
如果我们的假设正确,GDA模型更高效,效果也更好,但是logistic
regression因为比较简单,对于即使假设错误了依然有很好的鲁棒性。GDA最大化联合分布,而LR最大化的是概率分布。
所以我们发现,GDA并不像普通的学习算法那样需要去进行cost
funtion的优化。这得益于我们假设整个正样本的X服从一个高斯分布。而之前的学习方法,每个样本因为X不同各个样本之间服从分布的参数都会不一致,也就是每个样本在给定y的时候有一个自己的分布(如逻辑回归,每个样本都有不同的概率,而它预测的是伯奴利分布,也就是每个样本服从不同的伯奴利分布;又如线性回归,每个样本有不一样的)。
Naive Beyas
下面介绍朴素贝叶斯模型。它用来处理输入为离散数据时候的情况。假如有这么一个例子:垃圾邮件分类。如何定义邮件的特征?当然定义的是其中的单词了。但是这个世界上单词有很多很多,而垃圾邮件很可能更包含了很多无意义的字符组合,这样特征就更多了。
假设给一个大小为n的字典(这个n可能很大,50000或者100000),而一个邮件的特征值会像下面的样子:
1或者0代表了在这个邮件中是否出现了。
现在希望对建模。对于一封垃圾邮件:
使用了概率论中的链式法则。这个规则我也不了解,概率论还需要学习
这样的计算是非常复杂的。因此朴素贝叶斯模型中有一个假设:在给定y之后是条件独立的。这意味着:.
所以.
多变量伯奴利事件模型
.
这个模型假设了每封邮件是以随机生成的。如果给定y,每个单词是独立的包含在信息里的,而这个概率为.
这个模型参数如下:
同样的,接下来要做的依然是求log极大似然估计:
不难想象,各个参数的取值如下: $$ y = p(y=1) = m {i=1}^m
{y_i=1}\
_ {j|y=b} = ,b=0,1 $$
当给了一个新的样本的时候,我们计算:
然后根据概率是否大于0.5来进行预测。
Laplace Smoothing
这个模型是有一个缺点的:如果新的样本的单词从来没有在训练集合里出现过,那么:
也就是垃圾邮件和非垃圾邮件里出现它的概率都为0.那么最后预测结果为,这就没法计算了。
所以我们需要进行Laplace平滑。对于没有出现过的词,我们给他赋一个较小值,而不是让他为0:
为了最后使得的和为0,所以k为类比的个数,即。
所以最后的估计就成了下面的样子:
除此之外其他地方是一样的。
Naive Bayes and
Multinomial Event Model
现在有一个新的方法,就是多项式模型。
现在,其中|V|为字典的长度。而n为信息的长度,也就是现在每个样本的特征数已经不一样了,因为我们没法保证每封信长度一样。
对字典中每个词都进行编号:
| dictionary id |
1 |
2 |
… |
1300 |
… |
2400 |
… |
| word |
a |
aa |
… |
free |
… |
gift |
… |
多项式模型中有下面几个假设: *
信息随机地被以概率生成
*
独立同分布
*
假设对所有的来说都相等。
则该模型参数如下: *
*
for any
*
for any
则出现训练样本的概率为:
各个参数取值如下: $$
\Phi_y = \frac 1 m \sum_ {i=1}^m \mathbf{1}\{y_i=1\}\\
\Phi_ {k|y=1} = \frac{\sum_ {i=1}^m \mathbf{1}\{y_i=1\}\cdot (\sum_
{j=1}^{n_i}\mathbf{1}\{x_i=k\}) +1}{\sum_ {i=1}^m
\mathbf{1}\{y_i=1\}+|V|}\\
\Phi_ {k|y=0} = \frac{\sum_ {i=1}^m \mathbf{1}\{y_i=0\}\cdot (\sum_
{j=1}^{n_i}\mathbf{1}\{x_i=k\}) +1}{\sum_ {i=1}^m
\mathbf{1}\{y_i=0\}+|V|}
$$
最后,预测值为: