监督学习之生成学习算法——Andrew Ng机器学习笔记(四)

内容提要

这篇博客的主要讲生成学习算法,主要包括两个算法:
- 高斯判别分析(Gaussian Discriminant Analysis)
- 朴素贝叶斯(Naive Bayes)

now let’s begin

前言

今天学习的生成学习算法依然属于监督式学习算法,我们需要输入训练集,训练参数,然后进行分类。比如我们输入动物的特征 x ,然后打上标签y=1表示是大象;对待另外一种输入特征,打上标签 y=0 表示是狗。我们依然利用这种简单的例子学习算法,假设 y 服从的是伯努利分布,参数为ϕ。然后我们就用 p(x|y=1) 表示大象特征的分布,用 p(x|y=0) 表示狗特征的分布。然后利用贝叶斯公式就可以得到 xy 的关系如下:

1.png

其中 p(x) 利用的是全概率公式: p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0) 。根据我们对这些特征分布的不同假设,就有了高斯判别分析和朴素贝叶斯。首先来看高斯判别分析:

高斯判别分析(Gaussian Discriminant Analysis)

高斯判别分析就是假设 p(x|y) 服从高斯分布,在实际情况中我们的 x 往往是一个向量。所以我们有必要先复习一下,多元高斯分布:

多元高斯分布

多元高斯分布中:μRn是均值向量; Rnn 是协方差矩阵。 XRn,XN(μ,) ,则概率密度为:

2.png

X 的期望为:

3.png

X的协方差: Cov(X)=E[(XE[x])(xE[x])T]=E[XXT](E[X])(E[X])T ,最终结果为:

4.png

下面我们再来看看协方差矩阵和均值向量对密度函数的影响。首先看看协方差对密度函数的影响,如图示:

5.png

可以看出:
1. 协方差矩阵主对角线缩小图像就变得尖了,当增大时,图像就变得平摊了。
2. 协方差矩阵副对角线为正时,并且缩小,图像就以 y=x 为对称轴变扁。增大时,效果相反。
3. 协方差矩阵副对角线为负时,并且缩小,图像就一 y=x 为对称轴变扁。增大时,效果相反。

利用等高线图,可以更加清楚的看到这个性质:

6.png

再来看看均值向量对密度函数的影响,如下图(协方差矩阵 =I ):

7.png

总结起来,可以看出这种多元的高斯分布和一元的高斯分布非常类似。多元的均值向量影响的也是密度函数中心的位置,协方差矩阵影响的是密度函数的“胖瘦”。说是多元其实就是二元,更多元的我现在也不知道,因为,一元的时候是方差,二元的时候是协方差矩阵,那么三元的。。。我现在不知道,再看看。

高斯判别分析模型(Gaussian Discriminant Analysis model(简称GDA))

首先做出如下的假设,Andrew Ng老师在课上也没有解释为什么是这样的假设。我想可能是在实验中,做出这样的假设,得到的效果比较好。进而也将这种假设系统的设计成一种模型或者算法。

8.png

Andrew Ng老师解释说这不是条件概率,只是形式和他像。但是我就是像条件概率一样去理解他,也行。下来我们具体的写出它们的密度函数:

9.png

和之前一样,写出它的似然函数然后去对数(这个似然函数有一个转门的名字:Joint Likelihood):

10.png

然后令对数似然函数达到最大,利用之前的梯度上升,牛顿法都可以。但是对于这个式子具体的怎么推导我也不知道。Andrew Ng老师直接给出了,计算的结果。有了参数的就算结果,就可以让模型工作了。

11.png

下来,我们看看一个简单的例子,一元的。如下图:

12.png

横坐标上的叉和圆圈都代表我们的输入特征,叉和圆圈仅仅是为了区分。你可以把他想象成狗和大象的特征。经过这些,数据的训练,我们就可以得到 ϕ,μ1,μ2, 的值。我们也就可以写出 p(x|y=0),p(x|y=1) 的密度表达式,图像分别为上图中左边和右边的高斯曲线。现在我们就可以利用这些参数计算 p(y=1|x) 的值,利用的公式是:

p(y=1|x)=p(x|y=1)p(y)p(x)p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)

从左至右给出一些 x 就可得到相应的p(y=1|x)计算结果,我们将它标注在图上,就可以出现上图中的红色曲线。特别的在两个高斯曲线交汇的地方,计算的结果一般为0.5,越靠近右边计算结果越接近1。这个曲线和逻辑回归中的sigmoid函数的曲线很想,但是不一样,他们有本质的区别。比如这条曲线在0.5附近就比sigmoid函数的曲线要陡峭。怎么理解这条曲线呢?比如就前面例子,你输入了一个 x ,如果越是靠近右边,我就可以通过这个算法认为,你输入的是大象的特征x。如果越是靠近左边,我这个算法就认为这不是大象的特征 x 。同样的我们也可以利用同样的方法做出p(y=0|x)的曲线,又不是 y 服从的是伯努利分布,所以会和图中的曲线相反。也就是说,如果你输入的x越靠近左边,我的算法就越是认为这是狗的特征 x

下面我们再来看看二维的分类效果:

13.png

这张图中高斯密度函数利用等高线绘制,最终我们得到了蓝色直线,它将两类分开。这就是高斯判别分析,写来是我们对高斯判别分析的讨论。

高斯判别分析的讨论

14.png

上图给出了一些关系,其实如果x|y只要服从指数分布族,都可以得到 p(y|x) 是一个logistic函数。高斯判别分析和逻辑回归最大的区别就是,高斯判别做了更强的假设,而逻辑回归没有。如果一个输入 x 服从的是泊松分布,而你假设成了高斯分布,那么计算的结果就没有逻辑回归得到的好。但是如果你的输入就是严格服从高斯,或者近似服从高斯,相比于逻辑回归你只需要更少的训练就可以得到很好的效果。在实际中这就要求我们根据具体情况进行权衡。

朴素贝叶斯(Naive Bayes)

加入你现在有两百封邮件,需要去标记它是不是垃圾邮件(y=1:y=0:)(y{0,1}),下一步就是怎么去表示一封邮件的特征,一般的想法是建立字典:

15.png

上图中右边单词或字母就是我们训练集中所有单词构成的字典。如果,一封邮件中出现了字典中的词,我们就在对应的特征位置标为1。但是,很容易想到词典的大小应该是一个很大的数,这就意味着我们特征向量的维数也是这个级别的或者更高,这就不是很好了。所以,朴素贝叶斯假设 xi 之间相互独立,即词典中各个词的出现没有关系。那么就可以写出 p(x|y) 的表达式,先利用条件概率的链式法则,再利用朴素贝叶斯的假设,就可以得到下面的式子:

16.png

条件概率链式规则的说明:
p(B|A)=p(AB)p(A) 可得 p(AB)=p(A)p(B|A)
同理先将AB看成一个整体: p(ABC)=p(AB)p(C|AB)=p(A)p(B|A)P(C|AB)

Andrew Ng老师也大概给出了,怎么去生成字典,一种比较有效的方式:对于垃圾邮件,我们去遍历他,将其中出现3次的单词提取出来就得到了,我们的词典。也学你还有更好的方法。

从例子中可以看出: p(x|y){0,1} ,但是向量的维数特别高,因为他要和字典的维数一致。如果字典的维数为 n ,那么x就可以有 2n 中情况。

特别的:朴素贝叶斯的假设一般不成立,比如出现了KFC就很可能出现buy,他们之间是有关系的。但是朴素贝叶斯在在实践中表现的很好,比如在邮件分类中。

下来我们要对各种情况的分布进行假设,我觉得这也是这两种生成学习算法的区别(不同分布的假设)。分布的假设是:伯努利分布,同时给出响应的参数:

17.png

如果我们有训练集 {x(i),y(i);i=1,2...m} ,此时我们就可以给出 joint 似然函数(joint likelihood)如下:

18.png

使得joint似然函数最大,便可以得到各个参数的似然估计,如下:

19.png

上式中 x(i)j 表示训练集中第 i 个特种向量x中的第 j 个分量。

最终我们就可以得到判断垃圾邮件的响应函数,本质上就是一个贝叶斯公式:

20.png

其中对于p(x|y)的展开就是利用我们前面条件概率链式法则加朴素贝叶斯假设得到的那个公式,稍微往上看看,你就看到了。

在来细细看看上面这个式子,我们发现它是一个分数的形式,这就需要考虑到分子为零情况。那么什么情况写分子才可能为零呢? p(y=1),p(y=0) 不可能同时为零,那么就要看看这些连乘的式子会不会为零,因为,连乘中只要有一个为零,整个式子就为零。想象一种情况,在我们训练好这个模型后,来了一封邮件,在它之中有一个词“NIPS”你的算法从来都没有见过,假如它出现的位置为35000处,由于之前从来都没有见过他,所以他既不是正常邮件,也不是垃圾邮件,所以训练的时候 x35000 这个的位置就是0,则得到的参数均为零:

21.png

在判断这封邮件时判断垃圾邮件的响应函数就出现了 00 的情况,怎么处理呢?Laplace smoothing

Laplace smoothing

我们先举个例子,比如一个球队的战绩:

时间对手比赛结果(0:失败)
2/1A0
2/2B0
2/3C0
2/4D0
2/5E?

求该对在与E对决中获胜的概率是多少?
p(y=1)=1+11+1+0+1=16
这就是Laplace smoothing,我觉得他其中最关键的就是添加了“安全因子”,使得分母不为零。

对于朴素贝叶斯我们就可以做出如下改进:

22.png

|V| 是字典的维数。

再谈朴素贝叶斯

先来回顾一下,我们判断垃圾邮件的响应函数:

20.png

公式是这样写的,但是假如来了一封邮件,我们到底是怎样来判断他是否为垃圾邮件的?过程是这样的:来了一封邮件,我们得到了他的特征向量 x ,然后我们就利用上式进行计算,p(y=1|x)>p(y=0|x)则此封邮件时垃圾邮件,反之亦然。那么上面这个公式展开后是怎样的?可以看到式子中有 ni=1p(xi|y=1)p(y=1) ,其中 n 为邮件的长度,也就是特征向量的维度。p(xi|y=1),p(y=1)这两个概率就是我们前面训练的参数。

17.png

对应下标,带入即可。最终响应函数可以进一步简写成如下样子:

23.png

其中 y{0,1} ,上式前后代换利用的是贝叶斯公式,由于有朴素假设,分布的和为1,所以就成了上面的样子。由于这个模型中 x,y 向量中的每一个分量的取值非0即1,所以这个模型称之为:多变量伯努利模型(multi-variate Bernoulli event model)

下来我们再来看看多项式模型(multinomial event model),在这个模型中, x 的每一个分量xi{1,2...|V|},其中 |V| 是字典的维度,即字典中有多少个单词。那么 x 向量中保存的就是该邮件中出现单词出现的次数,xi是词典中第i个词。参数的表示形式和上面的一样,在给定训练集的情况下,我们似的似然函数取得最大值,求出参数:

17.png

24.png

25.png

其中, ni 为第i个特征向量 x 的维数。k为某一单词出现的次数。 mi=11{y(i)=1}ni 表示,在训练集中所有垃圾邮件的单词总数。同样的,我们可以对参数进行拉普拉斯平滑:

26.png

最终分类的表达形式还可以表达成和上面的式子相同的样子:

23.png

参考资料

Andrew Ng老师的斯坦福公开课


end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值