生成式分类器 VS 判别式分类器

时间:2024-04-07 17:21:37

生成式分类器和判别式是根据两种不同的设计方法而得到的,即利用生成模型设计了生成式分类器,用判别模型设计了判别式分类器。

一、生成模型的方法

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(H|D)=P(D|H)P(H)P(D),可以得到:

可以看出分子其实就是联合概率分布

假定”打喷嚏”和”建筑工人”这两个特征是独立的,因此,上面的等式就变成了:

P(|×)=P(|)×P(|)×P()P()×P()

所以:  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):g(z)=11+ez来求我们的预测函数:

hθ(x)=g(θTx)=11+eθTx

生成式分类器 VS 判别式分类器

最终得到分类曲线,也就是一个函数边界来区分疾病类型。

三、生成方法和判别方法的区别

从前面所说的特点中也可以容易的看出生成方法和判别方法的区别,这里再做一下总结:

生成式分类器 VS 判别式分类器

  • 生成模型学习联合概率分布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