生成式学习算法

考虑一个分类问题:

根据一个动物的特征来区分该动物是大象(y=1)还是狗(y = 0).利用逻辑回归找到一条直线,即分界线,将训练集中的大象和狗分开,当给定一个新的动物特征时,检查该动物位于分界线的哪一边,然后做出判断是大象,还是狗,就是对p(y|x;θ)进行建模。

这里我们来看另一种不同的思路,首先根据训练集,我们找出大象有什么特征,然后找出狗有什么特征,当要对一个新的动物进行分类的时候,我们就对比该动物是与大象的特征更加匹配还是与狗的特征更加匹配,从而进行分类。

直接学习p(y|x)的算法是直接把特征x映射到类别{0,1},被称为判别式学习算法(discriminative learning algorithms).这里,我们将要讨论另外一种学习算法:生成式学习算法(generative learning algorithms).例如,如果y表示某一个样本是狗(y=0)还是大象(y=1),那么p(x|y=0)就是狗的特征分布,p(x|y=1)表示大象的特征分布。

在我们知道p(y)(这个值可以根据训练集中各个类别的多少容易统计出来),并且对p(x|y)建模后,利用贝叶斯规则,就可以得到在给出x时y的后验分布:

分母p(x) = p(x|y=1)p(y=1)+p(x|y=0)p(y=0).

1.高斯判别分析(Gaussian discriminant analysis,GDA)

用多元正态分布对p(x|y)进行建模:

其中是均值向量,是协方差矩阵,y不是0就是1,显然服从伯努利(Bernoulli)分布.

把上面的表达式展开写:

这个模型的参数有:,于是参数的对数似然函数:

通过对上述对数似然函数进行最大化(通过程序,逐步迭代),可以得出各个参数的最大似然评估(下面是理论上数学计算出的具有最大似然性的参数值):

2. GDA和逻辑回归

如果我们把看作是关于的函数,则可以发现下面有趣的现象:

是关于的函数,等式右边正是逻辑回归的模型——一种判别式算法,用来建模p(y=1|x).

但是哪一个模型更好呢?GDA还是逻辑回归?由上面的等式可以看出,如果p(x|y)是多元的高斯分布,可以得出p(y|x)必然就是一种逻辑函数,但是反过来说就不对了。

也就是说GDA比逻辑回归对模型的假设更强。事实证明,当我们的假设正确(就是假设p(x|y)服从高斯分布)的时候,没有那个算法在严格意义上比GDA好(即准确地估计出p(y|x)).

但需要注意的是,GDA好的前提是假设正确(假设p(x|y)服从高斯分布),即GDA作为一个强假设模型,它对假设的正确与否很敏感,当假设不正确的时候,结果往往很糟糕。

而逻辑回归作为一个弱假设,对假设的正确与否没有强假设那么敏感,即使假设不正确,逻辑回归的同样可以做出不错的预测。正是由于这个原因,在实践中,逻辑回归要比GDA用的更加

频繁。

时间: 2024-12-20 01:06:24

生成式学习算法的相关文章

Ensemble_learning 集成学习算法 stacking 算法

原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学习器的概念,但是使用的相对于bagging和boosting较少,它不像bagging和boosting,而是组合不同的模型,具体的过程如下:1.划分训练数据集为两个不相交的集合.2. 在第一个集合上训练多个学习器.3. 在第二个集合上测试这几个学习器4. 把第三步得到的预测结果作为输入,把正确的回

写在前面:21天学习算法

最近打算找一份新的工作,感到自己在算法环节还很疲弱.由于时间还算充裕,就决定将LeetCode上面的算法题学一遍,找出自己的薄弱,锻炼算法思维,吸收他人长处.个人觉得,刷题只是学习算法中的一个环节,主要的作用是用来反馈错误和增加熟练度.相比较刷题,更加重要的是对比和总结,对比自己的代码和他人的代码,对比不同的解法,总结一类算法或一类问题,总结一些tips,这两步是提升自己的关键.另外,为了不让自己的视野过于局限,让得到的碎片化学习成果体系化,可以在刷题的时候,就某方面的算法或数据结构,多参考其他

感知机学习算法 python实现

参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... 1 """ 2 感知机学习算法的原始形式 3 例2.1 4 """ 5 import numpy as np 6 7 class Perceptron: 8 def __init__(self,w,b,alpha): 9 self.w = w 10 self.b = b 11 self.alpha = alpha 12 13 def loss(self,x,y

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

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

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

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

生成学习算法(Generative Learning algorithms)

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

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

机器学习(二):感知机学习算法

感知机是一种线性分类模型,属于判别模型 f(x)  = sign(wx+b) ;  f(x)∈{+1,-1}; 其中M为错分类点的集合M. 感知机学习算法是误分类驱动的,采用随机梯度下降法进行参数更新. w<-----w + γyixi b<-----b + γyi γ为学习率,反复迭代直到所有样本均分类正确. 总结: 输入:训练数据集T={(x1,y1),(x2,y2).....(xn,yn)},学习率γ∈[0,1] 输出:w,b 感知模型f(x) = sign(wx+b) (1)选取初值

菱形打印程序——谈如何学习算法

菱形打印程序——谈如何学习算法 1.菱形打印 很多人,打印菱形在控制台的思路是,把菱形上下拆分,分两段很接近的代码来打印,其实这样代码很不好看,并且不好阅读.    我们知道,要打印的图案是这种:                            *                          *** *****      ***    * 满足上下对称,左右对称,那么,你能不能也弄一个二重循环,同样是对称的?      很简单,首先我们要抛开习惯性思维,for循环不一定要在0开始或者