监督学习的任务就是学习一个模型,应用这个模型,对给定的输入预测相应的输出。这个模型一般为决策函数:Y=f(X) 或 条件概率分布:P(Y|X)。
监督学习的学习方法可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别叫生成模型和判别模型。
生成方法
定义
由数据学习联合概率分布P(X,Y), 然后由P(Y|X)=P(X,Y) / P(X) 求出概率分布P(Y|X)。该方法表示了给定输入X产生输出Y的生成关系。
典型模型
朴素贝叶斯方法、隐马尔可夫模型
特点
生成方法可以还原出联合概率分P(X,Y),而判别方法不能;生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型;当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用。
注释
当我们找不到引起某一现象的原因的时候,我们就把这个在起作用,但是,无法确定的因素,叫“隐变量”
判别方法
定义
由数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。
典型模型
k近邻法、感知机、决策树、逻辑斯谛回归模型、最大熵模型、支持向量机、提升方法、条件随机场
特点
判别方法直接学习的是决策函数Y=f(X)或条件概率分布P(Y|X),直接面对预测,往往学习准确率更高;由于直接学习P(Y|X)或f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
一个通俗的例子
生成模型学习联合概率分布p(x,y),而判别模型学习条件概率分布p(y|x)。两者最终都是求得p(y|x)。为了求得更真实的p(x),生成模型往往需要更多的训练数据。
下面是个简单的例子:
例如我们有以下(x,y)形式的数据:(1,0), (1,0), (2,0), (2, 1)
那么p(x,y)是:
y=0 y=1
-----------
x=1 | 1/2 0
x=2 | 1/4 1/4
而p(y|x) 是:
y=0 y=1
-----------
x=1| 1 0
x=2| 1/2 1/2
我们为了将一个样本x分类到一个类y,最自然的做法就是条件概率分布p(y|x),这就是为什么我们对其直接求p(y|x)方法叫做判别算法。而生成算法求p(x,y),而p(x,y)可以通过贝叶斯方法转化为p(y|x),然后再用其分类。但是p(x,y)还有其他作用,例如,你可以用它去生成(x,y)对。
再假如你的任务是识别一个语音属于哪种语言。例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:
1、学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你哄,你就可以知道他说的是什么语音,你就可以骂他是“米国人还是小日本了”。(呵呵,切勿将政治掺杂在技术里面)
2、不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。
那么第一种方法就是生成方法,第二种方法是判别方法。