前言
监督学习模型可以分为生成模型(generative model)和判别模型(discriminative model)
1.生成模型和判别模型
判别模型由数据直接学习决策函数
f
(
x
)
f(x)
f(x)或者条件概率分布
P
(
y
∣
x
)
P(y|x)
P(y∣x)作为预测的模型,即判别模型。判别方法关心的是对给定输入 x,应该预测什么样的输出 y。
比如说要确定一只羊是山羊还是绵羊,用判别模型的方法是先从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,还是绵羊的概率。
生成模型由数据学习输入和输出联合概率分布
P
(
x
,
y
)
P(x,y)
P(x,y),然后求出后验概率分布
P
(
y
∣
x
)
P(y|x)
P(y∣x)作为预测的模型,即生成模型。这里以朴素贝叶斯为例,我们要求的目标可以通过:
P
(
x
,
y
)
=
P
(
x
∣
y
)
P
(
y
)
P(x,y) = P(x|y)P(y)
P(x,y)=P(x∣y)P(y)
求出输入输出的联合概率分布,然后通过贝叶斯公式:
P
(
y
∣
x
)
=
P
(
x
∣
y
)
P
(
y
)
P
(
x
)
P(y|x) = \frac {P(x|y)P(y)}{P(x)}
P(y∣x)=P(x)P(x∣y)P(y)
求出后验概率分布。
对于上面的例子我们换种思路,我们可以根据山羊的特征首先学习出一个山羊模型,然后根据绵羊的特征学习出一个绵羊模型。
然后从这只羊中提取特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。
由于我们关注的是 y 的离散值结果中哪个概率大(比如山羊概率和绵羊概率哪个大),而并不是关心具体的概率,因此上式改写为:
a
r
g
m
a
x
y
P
(
y
∣
x
)
=
a
r
g
m
a
x
y
P
(
x
∣
y
)
P
(
y
)
P
(
x
)
=
a
r
g
m
a
x
y
P
(
x
∣
y
)
P
(
y
)
arg max_y P(y|x) = arg max_y \frac {P(x|y)P(y)}{P(x)} = arg max_y P(x|y)P(y)
argmaxyP(y∣x)=argmaxyP(x)P(x∣y)P(y)=argmaxyP(x∣y)P(y)
其中
P
(
x
∣
y
)
P(x|y)
P(x∣y)称为条件概率(class-conditional probability),或称为“似然”(likelihood),
P
(
y
)
P(y)
P(y)称为先验(prior)概率。
P
(
x
)
P(x)
P(x)是用于归一化的"证据"因子。对于给定样本 x,证据因子
P
(
x
)
P(x)
P(x) 与类标记无关,因此估计
P
(
y
∣
x
)
P(y|x)
P(y∣x)的问题就转化为如何基于训练数据来估计先验
P
(
y
)
P(y)
P(y)和似然
P
(
x
∣
y
)
P(x|y)
P(x∣y)。
不管是生成式模型还是判别式模型,它们最终的判断依据都是条件概率,但是生成式模型先计算了联合概率,再由贝叶斯公式计算得到条件概率。因此,生成式模型可以体现更多数据本身的分布信息,其普适性更广。
举个例子:
假设现在有一个分类问题,X是特征,Y是类标记。用判别式模型学习一个条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X),用生成式模型学习一个联合概率分布 P ( x , y ) P(x,y) P(x,y)。用一个简单的例子来说明这个问题。假设X有两个取值(1或2),Y有两类(0或1),有如下训练样本(1,0)、(1,0)、(1,1)、(2,1)。
则学习到的条件概率分布(判别式模型)如下:
P
(
y
=
0
∣
x
=
1
)
=
2
3
P(y=0|x=1) = \frac{2}{3}
P(y=0∣x=1)=32
而学习到的联合概率分布(生成式模型)如下:
- 计算特征
X
X
X的频率分布:
P ( x = 1 ) = 3 4 P(x=1)=\frac {3}{4} P(x=1)=43
P ( x = 2 ) = 1 4 P(x=2)=\frac {1}{4} P(x=2)=41 - 计算标签
Y
Y
Y的频率分布:
P ( y = 0 ) = 2 4 P(y=0)=\frac {2}{4} P(y=0)=42
P ( y = 1 ) = 2 4 P(y=1)=\frac {2}{4} P(y=1)=42
P
(
x
=
1
,
y
=
0
)
=
P
(
x
=
1
∣
y
=
0
)
P
(
y
=
0
)
=
1
∗
1
2
=
1
2
P(x=1,y=0) = {P(x=1|y=0)P(y=0)} = 1 * \frac {1}{2} = \frac {1}{2}
P(x=1,y=0)=P(x=1∣y=0)P(y=0)=1∗21=21
P
(
x
=
2
,
y
=
0
)
=
P
(
x
=
2
∣
y
=
0
)
P
(
y
=
0
)
=
0
∗
1
2
=
0
P(x=2,y=0) = {P(x=2|y=0)P(y=0)} = 0 * \frac {1}{2} = 0
P(x=2,y=0)=P(x=2∣y=0)P(y=0)=0∗21=0
P
(
x
=
1
,
y
=
1
)
=
P
(
x
=
1
∣
y
=
1
)
P
(
y
=
1
)
=
1
2
∗
1
2
=
1
4
P(x=1,y=1) = {P(x=1|y=1)P(y=1)} = \frac {1}{2} * \frac {1}{2} = \frac {1}{4}
P(x=1,y=1)=P(x=1∣y=1)P(y=1)=21∗21=41
P
(
x
=
2
,
y
=
1
)
=
P
(
x
=
2
∣
y
=
1
)
P
(
y
=
1
)
=
1
2
∗
1
2
=
1
4
P(x=2,y=1) = {P(x=2|y=1)P(y=1)} = \frac {1}{2} * \frac {1}{2} = \frac {1}{4}
P(x=2,y=1)=P(x=2∣y=1)P(y=1)=21∗21=41
在实际分类问题中,判别式模型可以直接用来判断特征的类别情况;而生成式模型需要加上贝叶斯公式
P
(
y
=
0
∣
x
=
1
)
=
P
(
x
=
1
,
y
=
0
)
/
P
(
x
=
1
)
=
1
2
/
3
4
=
2
3
P(y=0|x=1)=P(x=1,y=0)/P(x=1)=\frac {1}{2} / \frac {3}{4}= \frac {2}{3}
P(y=0∣x=1)=P(x=1,y=0)/P(x=1)=21/43=32
然后应用到分类中。但是,生成式模型的概率分布可以有其他应用,就是说生成式模型更一般更普适。不过判别式模型更直接,更简单。两种方法目前交叉较多。由生成式模型可以得到判别式模型,但由判别式模型得不到生成式模型。
2.常见的生成模型和判别模型
常见的判别模型有
- 线性回归
- 逻辑回归
- 线性判别分析(Linear Discriminant Analysis,LDA)
- 支持向量机(SVM)
- K最近邻(KNN)
- 条件随机场(CRF)
- 神经网络
- 区分度训练
- …
常见的生成模型有
- 隐马尔科夫模型(HMM)
- 马尔科夫随机场(Markov Random Fields)
- 朴素贝叶斯模型(Naive Bayes)
- 高斯混合模型(Gaussian Mixture Model,GMM)
- 狄利克雷分布模型(Latent Dirichlet Allocation,LDA)
- 受限玻尔兹曼机(Restricted Boltzmann Machine)
- 深度信念网络(DBN)
- …
3.判别式模型和生成式模型的优缺点
- 判别式模型是在寻找一个决策边界,通过该边界来将样本划分到对应类别。
- 生成式模型则不同,它学习了每个类别的边界,包含了更多信息,可以用来生成样本。
优点 | 缺点 | |
---|---|---|
判别式模型 | 1、对条件概率建模,学习不同类别之间的最优边界,预测时拥有较好性能。 2、学习成本较低,需要的计算资源较少。 3、需要的样本数可以较少,少样本也能很好学习。 | 1、捕捉不同类别特征的差异信息,不学习本身分布信息,无法反应数据本身特性。 2、无法转换成生成式。 |
生成式模型 | 1、对联合概率建模,学习所有分类数据的分布,因此学习到的数据本身信息更多,能反应数据本身特性。 2、一定条件下能转换成判别式。 | 1、推断时性能较差。 2、学习成本较高,需要更多的计算资源。 3、需要的样本数更多,样本较少时学习效果较差。 |
ps:生成式模型的学习收敛速度更快,当样本容量增加时,学习到的模型可以更快的收敛到真实模型,当存在隐变量时,依旧可以用生成式模型,此时判别式方法就不行了。