判别模型(discriminative model)和生成模型(generative model)
这几天阅读文章,频繁出现了discriminative model和generative model这两个词,借此机会细致梳理一遍二者的区别与联系。
还是以一个具体的例子直观理解:
假设有一批数据$x_1,x_2,x_3,…,x_n$共有50个,其中分为两个类别$y_0,y_1$。$y_0$共有20个,$y_1$共有30个。每个数据$x_i,i\in[1,50]$ 有两个特征$feature_1,feature_2$ 。寻找一个模型,能对新数据的类别进行有效的判断和分类。
generative model
- 分别确定这两个class的数据分布
- 计算分布模型的参数
- 对某个数据$x_i$ 计算其属于class1和class2的概率,确定其类别
确定数据分布
按理说我们最好是事先知道这个数据分布的,但如果不知道也可以假设其数据符合xx分布,如高斯分布(正态分布)。
我们假设这两个类别的数据都符合高斯分布。
确定模型参数
高斯分布中有两个参数:均值$\mu$ 和方差$\sigma^2$ 。
$$
f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\\
\mu = \frac{1}{n}\sum\limits_i^nx_i\\
\sigma^2 = \frac{1}{n}\sum\limits_i^n(x_i-\mu)^2
$$
带入相关数据即可求解出类别1的$\mu_1,\sigma^2_1$ 和类别2的$\mu_2,\sigma^2_2$
计算概率
这里应用贝叶斯的思想:
$$
\begin{equation}
\begin{aligned}
P(y_0|x) &= \frac{P(x|y_0)P(y_0)}{P(x)}\\
&=\frac{P(x|y_0)P(y_0)}{P(x|y_0)P(y_0)+P(x|y_1)P(y_1)}\\
\end{aligned}
\end{equation}
$$
这里我们发现需要计算的几个部分有: $P(y_0),P(y_1),P(x|y_0),P(x|y_1)$
都可以直接根据已有数据的情况计算得出。
分别的含义是:
- $P(y_0)$ :在数据集中$y_0$ 这个类别所占的比例
- $P(y_1):$在数据集中$y_1$ 这个类别所占的比例
- $P(x|y_0)$ :给定数据类别$y_0$ 的数据分布后,某个样本数据$x$ 属于$y_0$ 的概率
- $P(x|y_1)$ :给定数据类别$y_1$ 的数据分布后,某个样本数据$x$ 属于$y_1$ 的概率
discriminative model
判别式模型就比较直接,直接对$P(y_0|x)$ 建立模型如逻辑回归$P(y_0|x) = \sigma(wx+b)$ ,并利用交叉熵损失函数进行训练,利用梯度下降法优化参数$w,b$ 得出最优解的参数。对于某个具体的数据$x$ ,带入模型进行验证,若$P(y_0|x)\geq 0.5$ 则是属于类别$y_0$,否则属于类别$y_1$
这样一看,判别式模型不会考虑数据本身的特点,如数据分布等,而是专注于优化判别函数的性能,直接预测模型的输出。
总结对比
特点对比:
1. 判别式模型:直接反映数据特点,更容易找出不同类别的差异和边界,但对为什么这样,或者数据的哪些特点导致可以这样分,并不是很清楚,有些黑盒。
2. 生成式模型:对后验概率建模,贝叶斯思想, 能反映数据的特点,而且有时不是单纯学习已有数据的统计情况,会加一些模型“自己”的想法,适合数据量不是很大的时候,性能会更好一些。
建模对象的不同对比:
1. 判别式模型:$Y=arg\max(P(y|x))$
2. 生成式模型:$Y=arg\max(P(x|y)*P(y))$ ,分别学习$P(x|y)$ 和$P(y)$ 的概率分布特点
参考
https://blog.csdn.net/amblue/article/details/17023485
https://blog.csdn.net/Fishmemory/article/details/51711114
https://zhuanlan.zhihu.com/p/404249084
https://www.zhihu.com/question/576551589