生成式分类器和判别式是根据两种不同的设计方法而得到的,即利用生成模型设计了生成式分类器,用判别模型设计了判别式分类器。
一、生成模型的方法
1.1 生成方法
- 由数据学习联合概率分布
P(D,H) - 求出条件概率
P(H|D) 作为预测模型,即生成模型 - 根据后验概率
P(H|D) 进行分类
这里H可以认为是hypothesis,即预测,也是类别;D为data,即数据;
P(H|D) 即有一个新的data的时候,应该预测为什么类别。
1.2 生成方法的特点
由于是学习了联合概率分布P(D,H),可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。(反映H1中D1和D2的相似度也就是计算
P(D1|H1)∗P(D2|H1) )但它不关心到底划分各类的那个分类边界在哪。生成方法可以还原出联合概率分布P(Y|X),而判别方法不能。
生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型。
生成模型能够应付存在隐变量的情况,比如混合高斯模型就是含有隐变量的生成方法。
缺点:
1)天下没有免费午餐,联合分布是能提供更多的信息,但也需要更多的样本和更多计算,尤其是为了更准确估计类别条件分布,需要增加样本的数目,而且类别条件概率的许多信息是我们做分类用不到,因而如果我们只需要做分类任务,就浪费了计算资源。
2)另外,实践中多数情况下判别模型效果更好。
典型的生成模型有:朴素贝叶斯和隐马尔科夫模型等。
Naive Bayes
Mixtures of Gaussians
Hidden Markov Models
Bayesian Networks
Deep Belief Network
1.3 举个栗子
下面是一个用朴素贝叶斯进行疾病分类的例子
某个医院早上收了六个门诊病人,如下表。
症状 | 职业 | 疾病 |
---|---|---|
打喷嚏 | 护士 | 感冒 |
打喷嚏 | 农夫 | 过敏 |
头痛 | 建筑工人 | 脑震荡 |
头痛 | 建筑工人 | 感冒 |
打喷嚏 | 教师 | 感冒 |
头痛 | 教师 | 脑震荡 |
现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?
根据贝叶斯定理,
可以看出分子其实就是联合概率分布
假定”打喷嚏”和”建筑工人”这两个特征是独立的,因此,上面的等式就变成了:
所以: P(感冒|打喷嚏x建筑工人)
= 0.66 x 0.33 x 0.5 / 0.5 x 0.33
= 0.66
因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。
二、判别模型的方法
2.1 判别方法
直接学习决策函数
H=f(D) 或者条件概率分布P(H|D) ,本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。判别模型求解的思路是:条件分布——>模型参数后验概率最大——->(似然函数·参数先验)最大——->最大似然
2.2 判别方法的特点
- 直接学习决策函数
H=f(D) 或者条件概率分布P(H|D) ,不能反映数据本身。 它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。直接面对预测,往往学习的准确率更高。
直接学习P(Y|X)或f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
缺点
就是没有生成模型的那些优点
典型的判别模型有:k近邻,感知机,决策树,支持向量机等。
Linear & Logistic Regression
Support Vector Machine
Nearest Neighbor
Conditional Random Fields
Boosting
2.3 还是上面那个栗子
还是上面的病人的例子,如果我们用判别方法的逻辑回归,应该怎么做呢?
为了简化问题,我们暂时去掉患过敏的那个病历,这样就变成了一个二分类问题
我们是根据Sigmoid函数(sigmoid function):
最终得到分类曲线,也就是一个函数边界来区分疾病类型。
三、生成方法和判别方法的区别
从前面所说的特点中也可以容易的看出生成方法和判别方法的区别,这里再做一下总结:
- 生成模型学习联合概率分布p(D,H),而判别模型学习条件概率分布p(H|D)。
- 由生成模型可以得到判别模型,但由判别模型得不到生成模型
- 生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。
参考文献:
http://www.cnblogs.com/z-sm/p/5106243.html#autoid-0-1-0
https://www.zhihu.com/question/20446337
http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html