生成学习算法

  1. 生成学习算法引入

目前为止,我们主要讲解了条件概率模型p(y|x,θ)的学习算法。接下来,我们将讨论其他的学习算法。接下来举个例子,比如现在遇到一个分类问题,基于一些特征来判断一个动物是大象 (y = 1) 还是小狗 (y = 0)。基于给定的数据集,我们可以采用logistic回归或者感知器学习的方法来寻找一条直线(称之为决策边界)把大象和小狗分割开割开来。之后预测新的动物时,只要判断它在决策边界的哪一边就可以预测其所属分类。

现在有另外一种方法。首先是查看大象的数据,然后建立一个什么是大象的模型,之后查看小狗的数据,建立一个什么是小狗的模型。之后,遇到新的动物,只要分别代入两个模型中,看更像小狗还是大象就可以分类了。

通过训练集合来学习p(y | x)的学习算法称之为判别学习算法(discriminative learning algorithms),而通过训练集合来学习得到p(x | y)的学习算法则称之为生成学习算法(generative learning algorithms)。对于上大象和小狗的例子,p(x | y=0)表征了小狗的特征分布。

在知道了类的先验概率(class priors)p(y)之后,根据贝叶斯规则(Bayes rule),可以得到:p(y | x) = p(x | y) p(y) / p(x),其中分母p(x) = p(x | y=1)p(y = 1) + p(x | y =0) p(y = 0) (全概率公式)。如果只是为了预测(判断哪一个p(y | x)更大),我们就不需要计算分母,只需要比较分子的大小就可以。

  1. 高斯判别模型

第一个生成学习算法,我们通过高斯判别分析(Gaussian discriminant analysis (GDA))讲述。在这个模型中,将假设p(x | y)服从多元正态分布(multivariate normal distribution)。这里简单的介绍下多元正态分布。

多元正态分布,又称为多元高斯分布,它的均值μ ∈ Rn,它的方差Σ称为方差矩阵(covariance matrix), Σ ∈ Rn*n,是一个对称矩阵,表示为Ν (μ, Σ),表示如下:

更多介绍可以参见(多元正态分布)

当我们遇到一个分类问题,且特征是连续变量时,我们可以采用高斯判别模型,通过多元正态分布来表达p(x|y),具体为y ~ Bernoulli(φ),x|y = 0 ~ N (μ0, Σ),x|y = 1 ~ N (μ1, Σ),表达式如下:

这里,需要注意我们的假设条件中有两个不同的μ(分别为μ0 μ1), 但是Σ却只有一个(特征之间的方差)。之后,采用最大似然估计,可以得到:

通过求解最大似然估计,我们得到各个参数的估计值(实际推导过程中,可以把样本分成1-k,k-m分别表示结果为0和1的结果,这样能够将复杂的表达式简单化,其中k=):

形象的来说,该算法可以表述如下:对于用于训练集合得到的两个高斯分布,他们具有相同的轮廓和等高线(因为方差矩阵相同),而均值不同。我们也可以看到决策边界p(y = 1|x) = 0.5,将两个类分开。

  1. GDA VS logistic回归

GDA模型和logistic回归模型具有相似的关系,即如果我们把概率质量p(y = 1|x; φ, μ0, μ1, Σ)看成是x的一个函数,那么我们可以用如下公式来表述:

p(y = 1|x; φ, μ0, μ1, Σ) =1 / (1 + exp(?θTx)

其中θ是 φ, μ0, μ1, Σ的函数,这恰好是logistic回归——是对于p(y =1|x)的高斯判别分析。然而,通常来说,GDA和logistic回归会给出不同的决策边界,那么哪一种模型更好呢,或者说我们该如何选择GDA还是logistic回归呢?

如果p(x|y)服从多元正态分布(且Σ相同),那么p(y|x)可以使用logistic函数。相反,如果p(y|x)是logistic函数,那么p(x|y)未必服从多元正态分布。这说明GDA比logistic对数据集的假设要求更强。特别的,如果p(x|y)服从多元正态分布(且Σ相同),那么采用GDA将是渐进有效(asymptotically efficient)的。通俗的讲,就是随着样本量的增加,分类精度将会增加。换句话说,如果样本量足够大的话,那么没有任何方法能够比GDA更准确的描述p(y|x)。此外,即使数据集较小,我们也认为GDA模型更优于logistic 回归。

如果对数据集有较弱的假设,那么logistic回归鲁棒性(robust)更强,而且对不正确的数据分布假设也不会过于敏感。总结的说,GDA有更强的模型假设,对于服从模型假设或近似于假设的数据而言,GDA更依赖于数据的有效性。而logistic回归具有较弱的模型假设,而且对于模型假设偏差鲁棒性更好。此外,如果数据集分布不服从正态分布,那么logistic回归通常优于GDA。

  1. 朴素贝叶斯

    1. 朴素贝叶斯模型

在GDA模型中,我们的特征数据是连续型变量,现在我们讨论一种特征数据是离散变量的模型。在这里,我们通过机器学习在垃圾邮件中的分类案例,来讲述该模型。即我们通过判断一封邮件是垃圾邮件还是非垃圾邮件来进行邮件的分类,在学习得到该模型之后,我们可以自动的判断一封邮件是否是垃圾邮件。此外,垃圾邮件分类是属于文本分类(text classification)的一种。

假设我们现在有一堆训练集合(即已经标注为垃圾和非垃圾的一堆邮件),我们首先需要做的就是寻找一组合适的特征xi来表示每一封邮件。这里我们采用字典里的所有单词作为一封邮件的特征,即如果该邮件中出现字典中第i个单词,那么xi = 1,如果不包含,那么xi = 0。整体来说,我们使用如下向量:

来表示一封邮件的特征,即邮件中是否包含字典中的单词。然而,通常情况下,我们不使用字典(所有单词都用的话,特征太多),而是使用一定的方法从训练集合中找出合适的单词(有的时候需要使用停用词(stop words)或者tf-idf等方法来选择合适的特征)。对于x中的所有单词,我们称之为词汇表(vocabulary),特征属性的大小就是词汇表中词汇的个数。在得到我们的特征向量(feature vector)之后,我们开始构建生成学习算法。

假设我们有50000个单词,那么我们首先要构建p(x|y),其中x ∈ {0, 1}50000(x is a 50000维向量,值仅含0和1)。如果我们通过明确的分布来描述x(直接构建p(x|y)),那么我们需要250000个结果,即250000-1维向量的参数,将会有特别多的参数。为了方便p(x|y)建模,我们需要做出一个很强的假设:对于给定的y,xi
条件独立(conditionally independent即特征之间相互独立),该假设称之为朴素贝叶斯假设(Naive Bayes (NB) assumption),因此该模型又称之为朴素贝叶斯分类(Naive Bayes classifier)。举例子而言,对于给定的邮件比如垃圾邮件,那么特征单词buy是否出现并不影响特征单词price的出现。因此,有:

p(x1, . . . , x50000|y) = p(x1|y)p(x2|y, x1)p(x3|y, x1, x2) · · · p(x50000|y, x1, . . . , x49999)

= p(x1|y)p(x2|y)p(x3|y) · · · p(x50000|y) =

在第二步转换过程中,我们使用了NB假设。需要注意的是,即使贝叶斯有很强的假设要求,但是该方法在很多问题上(特征并非完全条件独立)仍然后较好的结果。

对于训练集合{(x(i), y(i)); i =1, . . . , m},我们的模型参数主要有

φi|y=1 = p(xi=1 | y=1),

φi|y=0 = p(xi=1 | y=0)

φy = p(y=1)

那么我们的最大似然函数如下:

最大化似然函数之后,我们得到:

该公式比较容易理解,φj|y=1 分子是出现单词j的垃圾邮件个数,分母是所有垃圾邮件个数;而φy
分子表示垃圾邮件个数,而分母表示总样本数。对于新出现的一封邮件,我们在得到特征向量之后,计算p(y=1|x)的值,就可以判断其所属类别。

此外,我们也可以扩展NB模型。比如x=1,2,3…k,那么我们可以使用多项分布来替代伯努力分布。如果x是连续变量,可以将x离散化。当原始数据是连续型的,且不能很好的满足多元正态分布,此时采用离散化后,使用贝叶斯分类(相比于GDA),通常会有较好的结果。

  1. 拉普拉斯平滑

对于很多问题,采用朴素贝叶斯方法都能够取得很好的结果,但是有些情况则需要对朴素贝叶斯分类进行一定的优化,尤其是在文本分类领域。接下来,我们讨论朴素贝叶斯方法在使用过程存在的缺陷,并探讨如何去优化。

仍然考虑垃圾邮件分类问题。比如在预测一封信邮件是否是垃圾邮件过程中,特征单词中的第3500个单词nips恰好在训练集合中从来没有出现,那么通过最大似然估计得到的φ35000|y如下:

因为单词nips从来没有出现,因此垃圾邮件和非垃圾邮件的条件概率均为0,因此在计算是否是垃圾邮件的后验概率中,因为分子中存在一个0项,导致最终结果无法判断。

推而广之,即因为训练集合的有限性而使某些特征值没有被包含,导致统计得到的条件概率为0。为了方便说明,我们取某一个特征z来说明,z的取值在{1, . . . , k },在给定的m个训练集里m, {z(1), . . . , z(m)},根据传统的最大似然估计,我们得到条件概率:

我们知道该方法存在一定缺陷,因此采用拉普拉斯平滑(Laplace smoothing)进行优化,即在分子中加1(即默认每一个值都已经出现过一次),考虑左右的频率和为1,因此分母加上k(k个值),如下:

这样如果一个特征没有出现,那么条件概率将不会是0,解决了刚才提到的问题。对于垃圾邮件分类,那么我们知道一个单词只有两个值(0,1),因此分子需要加1,而分母需要加2。实际应用中对于先验概率φy(不是条件概率φx|y)是否采用拉普拉斯平滑,并没有很大的影响,因为收集的数据集相对公平,不会导致0值的出现。

此外,需要注意的是,在计算新邮件的后验概率的分子的时候,φi|y=1 = p(xi=1 | y=1),这里不管是y=1还是y=0,都只计算x=1的情况,即只计算存在的单词(即出现的单词,不出现的单词不用计算)。此外,因为条件概率值介于0到1之间,50000特征的条件概率相乘(分子的计算)将会出现极小值,在某些情况下可能无法进行比较,因此,可以针对条件概率取对数,这样不仅可以放大概率值,还可以将乘法转化成加法,并得到可比较的值。

原文地址:https://www.cnblogs.com/kexinxin/p/9904397.html

时间: 2024-10-27 19:58:50

生成学习算法的相关文章

Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯

(一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解空间中寻找一条直线从而把两种类别的样例分开,对于新的样例,只要判断在直线的哪一侧即可:这种直接对问题求解的方法可以称为判别学习方法. 而生成学习算法则是对两个类别分别进行建模,用新的样例去匹配两个模板,匹配度较高的作为新样例的类别,比如分辨大象(y=1)和狗(y=0),首先,观察大象,然后建立一个大

生成学习算法(Generative Learning algorithms)

一:引言 在前面我们谈论到的算法都是在给定x的情况下直接对p(y|x;Θ)进行建模.例如,逻辑回归利用hθ(x) = g(θTx)对p(y|x;Θ)建模. 现在考虑这样一个分类问题,我们想根据一些特征来区别动物是大象(y=1)还是狗(y=0).给定了这样一个训练集,逻辑回归或感知机算法要做的就是去找到一个决策边界,将大象和狗的样本分开来.但是如果换个思路,首先根据大象的特征来学习出一个大象的模型,然后根据狗的特征学习出狗的模型,最后对于一个新的样本,提取它的特征先放到大象的模型中求得是大象的概率

【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)

参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/2013/06/08/3127490.html 首先,简单比较一下前几节课讲的判别学习算法(Discriminative Learning Algorithm)和本节课讲的生成学习算法(Generative Learning Algorithm)的区别. eg:问题:Consider a classi?cat

生成学习算法、朴素Bayes入门

PART0  判别学习算法 引入:二元分类问题 建模:判别学习算法(discriminative learning algorithm)直接根据P(y|x)[即给定特征x下的分类结果y]建模 之前我们用的算法(如logistic回归)就是判别学习算法 PART1  生成学习算法 PART1.1  Definition 引入:还是二元分类问题 建模:生成学习算法(generative learning algorithm)对P(x|y)[即给定具体的一类y下的特征x].P(y)建模,然后由baye

机器学习算法笔记2_1:生成学习算法(Generative Learning algorithms)

我们之前学习的算法都是基于p(y|x;θ), 他的思想是找出找出一个决策边界来将两类分开,而生成算法是先对两个类别分别建模,为了将样本分开,将样本代入两个模型,看样本与哪个类别更匹配. 这种试图直接从输入x映射到类别标签{0,1}的算法被称为判别学习算法:而通过计算p(x|y)(和p(y))来得到模型的算法被称为生成学习算法 通过贝叶斯函数得到p(y|x)=p(x|y)p(y)p(x), argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(x)

Stanford机器学习[第五讲]-生成学习算法

本课内容: 生成学习算法的介绍: 第一个典型的生成学习算法--高斯判别分析: 生成学习算法与之前的判别学习算法的对比: 朴素贝叶斯算法, Laplace平滑. 1.生成学习算法 学习算法分为两种:一种是判别学习算法(Discriminative Learning Algorithm),简称DLA,另一种是生成学习算法(Generative Learning Algorithm),简称GLA. DLA通过建立输入空间X与输出标注{1, 0}间的映射关系学习得到p(y|x).而GLA首先确定p(x|

分类和逻辑回归(Classification and logistic regression),广义线性模型(Generalized Linear Models) ,生成学习算法(Generative Learning algorithms)

分类和逻辑回归(Classification and logistic regression) http://www.cnblogs.com/czdbest/p/5768467.html 广义线性模型(Generalized Linear Models) http://www.cnblogs.com/czdbest/p/5769326.html 生成学习算法(Generative Learning algorithms) http://www.cnblogs.com/czdbest/p/5771

(笔记)斯坦福机器学习第五讲--生成学习算法

 本讲内容 1. Generative learning algorithms(生成学习算法) 2. GDA(高斯判别分析) 3. Naive Bayes(朴素贝叶斯) 4. Laplace Smoothing(拉普拉斯平滑) 1.生成学习算法与判别学习算法 判别学习算法:直接学习  或者学习一个假设  直接输出0或者1.logistic回归是判别学习算法的一个例子. 生成学习算法:对  建模,即在给定所属的类别的情况下,对特征出现的概率建模.出于技术上的考虑,也会对  建模.   根据贝叶斯公

斯坦福《机器学习》Lesson5感想———1、成学习算法

在前面几课里的学习算法的思路都是给定数据集以后.确定基于此数据集的最佳如果H函数,通过学习算法确定最佳如果H的各个參数,然后通过最佳如果函数H得出新的数据集的结果.在这一课里介绍了一种新的思路,它的核心思想是直接计算各种如果的最高概率,然后拟合各个如果的最高概率參数,并利用拟合得到的如果概率,计算出新的数据集的概率,选取概率最高的如果直接得出分类类别. 整个生成学习算法的精髓在于条件概率的使用.在二元分类里,也能够称为分别算法.在给定的数据集里确定p(y) 和p(x|y),然后根据贝叶斯定理.得