生成模型与判别模型
在学习Mechine Learning相关算法时,可将有监督算法分为两类:
- 生成模型(generative models)
- 判别模型(discriminative models)
当面对一个算法时,区分算法是生成的还是判别的对于理解算法有很大帮助。其实对于二者的区分十分简单。
1. 辨别方法
生成模型中需要计算输入变量和输出变量的联合分布 f ( X , y ) f(X,y) f(X,y) 。
对于判别模型,我们希望通过最优化方法对参数
θ
\theta
θ进行估计,建立
f
(
y
∣
X
;
θ
)
f(y|X; \theta)
f(y∣X;θ),即输入某个
x
i
x_{i}
xi后可直接计算得到
f
(
y
i
)
f(y_{i})
f(yi)。
具体的例子就是逻辑斯蒂回归,当模型建立后,给定
x
i
x_{i}
xi,则直接计算得到所述类别。
而对于生成模型,我们采用贝叶斯公式进行估计:
P
(
y
∣
X
)
=
P
(
X
∣
y
)
P
(
y
)
P
(
X
)
=
P
(
X
,
y
)
P
(
X
)
y
∗
=
arg max
y
P
(
y
∣
X
)
P(y|X) = \frac{P(X|y) P(y)}{P(X)} = \frac{P(X, y)}{P(X)} \\ y^{*} = \argmax_{y} P(y|X)
P(y∣X)=P(X)P(X∣y)P(y)=P(X)P(X,y)y∗=yargmaxP(y∣X)
核心原理即:当掌握了
P
(
X
,
y
)
P(X, y)
P(X,y)后,给出
x
i
x_{i}
xi,那么
y
i
y_{i}
yi的分布也就明确了。而后取出该y的分布的众数,即为预测值。
2. 举例
例如,希望建立模型根据某些健康指标(如白细胞计数、红细胞计数、血尿酸)的水平判断一个人是否换肾炎。
方法一:我们可以建立逻辑斯蒂回归,采用极大似然法拟合模型参数,那么下次再来病人(test data)时,我们将该病人的这些指标代入模型,则直接给出该病人是否患病(事实上是患病的概率估计)。—— 判别模型
方法二:我们同样可以建立朴素贝叶斯模型(naive Bayes),将以上的健康指标是否异常作为分类变量,而后计算得到有限样本量时的X和y的联合分布
f
(
X
,
y
)
f(X, y)
f(X,y),再用该联合分布除以对
P
(
X
)
P(X)
P(X)的估计。进而得到对
P
(
y
∣
X
)
P(y|X)
P(y∣X)的估计。可见,对于朴素贝叶斯而言,当训练样本增加后,模型的表现可能具有较大的提升。—— 生成模型
3. 二者比较
- 由以上的介绍可见,判别模型的复杂度更高。建立logistic regression时,需要对自变量的分布、误差的分布都有较严格的假设,同时需要采用极大似然法、梯度下降等共同估计参数。一般无需大量数据即可建模。
- 另一方面,生成模型需要较大量的数据进行训练才能得到较准确的模型。但该模型提供了联合分布,可提供多于判别模型的更多信息。