【CS229机器学习】 Lecture5:生成学习算法,生成模型,高斯判别分析模型,多元高斯分布,朴素贝叶斯,拉普拉斯平滑

本文详细介绍了生成学习算法,重点讲解了高斯判别分析(GDA)和朴素贝叶斯模型。在GDA部分,阐述了多元高斯分布、高斯判别分析模型的构建及其与逻辑回归的关系。而在朴素贝叶斯部分,讨论了多变量伯努利模型和拉普拉斯平滑的应用,解释了朴素贝叶斯分类器的工作原理和参数估计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上次:https://blog.csdn.net/cyr429/article/details/102624860


Part4:生成算法模型

至今给出的算法都是求在theta为参数条件下给出x的y的概率,比如逻辑回归和线性回归,现在要讨论一种不太一样的算法。

假设有一个分类问题要我们基于一些特征区别大象(y=1)和狗(y=0)。如果有一系列的训练集,逻辑回归或者感知机算法会试图找出一个分界线来分离训练集中的大象和狗。在遇到要分类的数据时,算法会观察这个数据是在分界线的哪一边来判断是大象还是狗狗。

现在有一个不同的算法,它首先会观察大象的数据并根据这些数据建立一个模型来判断大象是什么样子,再对狗狗的数据做一样的事情得到另一个模型。在判断的时候,会判断是更像狗狗还是更像大象,即两个模型的输出比大小。

第一种算法即直接判断并给出概率的算法(比如逻辑回归等)叫做判别学习算法。而刚刚提到的算法叫做生成学习算法,这个算法会用来为狗狗特征的分布建模,为大象特征的分布建模,这种算法基于贝叶斯法则:

具体的利用方式后面会提。


1.高斯判别分析法

第一种要介绍生成学习算法是高斯判别分析(GDA)。在这个模型中我们假设的分布服从多元高斯分布(或多元正态分布)。我们先讨论一些多元高斯分布的知识再说GDA。

1.1 多元高斯分布

d维的多元高斯分布写作:,其参数由均值向量和协方差矩阵组成,这里的sigma协方差矩阵是对称且半正定的,它的概率密度函数是:

对于随机的服从高斯分布的数据X,它的均值向量是:

其协方差矩阵:

miu和sigma的值会改变高斯分布在空间的形态和位置,下面是一些高斯分布的例子:

最左的是均值向量是0向量(2*1的)且协方差矩阵是I的(2*2的单位矩阵)的高斯分布,这样的叫做标准高斯分布。中间的图是协方差矩阵是0.6I的,最右图中协方差矩阵是2I,我们可以观察得出sigma越大,高斯分布得越向外分散,越小则越向中间集中。

上面这些高斯分布均值向量是0,协方差矩阵分别为:

左图是标准高斯分布,相比较另外两图我们发现如果我们增大sigma的副对角线,45度线上的分布会更密集一些。如果俯视的话:

下面是更多的例子:

相对应的协方差矩阵:

我们可以看出如果减少副对角线上的值,图像会在-45度方向变得更加紧凑。

以上的例子都是miu为0向量的。在sigma不变改变miu时,分布中心点的位置会发生改变:

1.2 高斯判别分析模型

当我们处理输入特征x是连续随机变量的分类问题时,我们可以使用高斯判别分析模型Gasussian Discriminant Analysis(GDA)。它是基于多元高斯分布的:

写出具体形式的话:

所以此模型的参数是\phi\Sigma\mu _{0}\mu _{1}(注意尽管\mu _{0}\mu _{1}是两个值,它们对应的是同一个协方差矩阵\Sigma),那么对数似然函数是:

通过最大化对数似然函数我们可以得出使得其最大的参数值是(ps1会要求推算此过程):

图像化的处理过程如下:

可以看出两个高斯分布有着相同的形状和方向,因为它们使用相同的协方差矩阵sigma。图中的直线是的线,在线的一边预测输出为1,另一边为0.

1.3 讨论GDA和逻辑回归

若我们把前面的:

改写成关于x的函数,会得到:

这里的theta是关于phi,sigma,miu1和miu0的函数。这个形式正是sigmoid的形式----来自于逻辑回归。

那么何时选择逻辑回归何时选择GDA呢?这里就不和课件一样长篇大论了,给大家总结一下:

1. 相比逻辑回归,GDA有着更强的模型化的假设

2. 若此模型化假设正确,GDA会拟合的更好,尤其是面对多元高斯分布数据时这个模型是渐进有效的

3. 若不正确,GDA会出现较大偏差

4. 综上所述逻辑回归更加robust但是不够sensitive,而GDA不够robust却对多元高斯分布更加sensitive


2.朴素贝叶斯

在GDA中,输入的x是连续的。让我们讨论一个不同的算法,它的输入x是离散的。

举个栗子,假设我们要用机器学习检测垃圾邮件,也就是把收到的邮件分为没用的商业性质的邮件和有用的邮件。这也是文字分类的一个栗子。

对于一个训练集,我们有两种方式将这些邮件处理成特征向量,2.1是基于多变量伯努利事件模型,2.3

2.1 多变量伯努利模型

在这一部分,我们会通过一个长度等于所有词汇组成的词典的特征向量来代表一封邮件。如果一封邮件含有第 j 个词,我们会将xj设置为1,否则为0,例如:

在特征向量中出现的词的集合叫做词汇,所以x的维度正好等于词汇的大小。

如果我们想直接基于这个特征向量建立生成模型来计算,但是词汇有50000,那么x就是维度为50000取值为{0 , 1}的向量。若我们根据多项分布会有2^50000种可能的输出,我们就需要2^50000-1维的参数,这明显太多了。

为了为建立模型,我们要做一个强烈的假设。我们假设基于y,xi们互相之间是条件独立的。这就是朴素贝叶斯假设,由此产生的算法就是朴素贝叶斯分类器。举个栗子,假设y=1代表是垃圾邮件,buy是第2087个单词,price是第39831个单词,那么朴素贝叶斯的假设就意味着y=1时(这是封垃圾邮件),x2087的值不会影响你对x39831是否等于1(有price这个词)的判断。注意这并不代表x2087和x39831是独立的(),而只是条件独立。所以我们能得出:

第一个等号基于概率论的基本定理,第二个等号则基于我们的朴素贝叶斯假设。虽然这是一种很强烈的假设,但是由其产生的算法工作起来却很有效。

我们模型的参数包括。给出一组训练集{(xi, yi); i=1,...,n},我们可以写出联合似然函数:

分别基于最大化联合似然函数得到最大似然估计:

这些式子很好理解,第一个式子的分子代表在所有垃圾邮件中单词word[j]出现的次数,分母代表垃圾邮件的数量。

在拟合完所有的参数后,在收到一封特征为x的新邮件时,我们可以简单地计算:

并判断哪个类别有着更高的后验概率。

虽然这里的例子用的x只有0和1两种取值,但是x也可取多种值。所以相比伯努利分布(二项分布),我们最终使用的是多项分布。x是连续值的话我们也可以离散化,比如把1-100离散成1-20,21-40,41-60,61-80,81-100五个空间。当多元高斯分布不能很好地拟合连续分布的数据时,NB经常会有更好的拟合结果。

2.2 拉普拉斯平滑

NB虽然好用,但是它还有一个小问题。如果我们碰到一封邮件有一个我们没有见过的新词,假设它是词汇中的第35000个单词,我们在计算phi时会出现:

因为我们的算法在所有的垃圾邮件和普通邮件中从未见过这个词,所以它认为在这两种邮件中看到它的概率是0,在计算后验概率时会出现:

因为分子分母中累乘的项中都有前面的0 ,结果我们的算法不知道怎么进行预测了。而且将数据集中没有出现过的元素的概率设置为0本身就是一个坏主意。

为了解决这个问题我们先假设我们要求多项分布的随机变量z值,z的取值范围{1,..,k},那么参数就是,假设我们有n个独立数据的数据集{z1, z2,..., zn},那么最大似然估计就是:

正如之前所说,如果要用最大似然估计,一些phij可能会变成0,为了避免发生这样的情况,我们可以进行拉普拉斯平滑,它会把最大似然估计改写成:

即分子加1分母加k,则仍然成立(phij作为概率总和必须为1)。这样就可以避免出现前面的问题。

回到我们的朴素贝叶斯分类器,这里k=2:

以上。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值