以下内容主要来自CS229课程的讲义,放上链接http://cs229.stanford.edu/syllabus.html
由二分类问题到生成模型的训练内容
我们基于二分类问题进行讨论,\(y\)的取值为\({0, 1}\)。
先提一下判别模型和生成模型的概念。在使用一个模型对一条新数据进行预测的过程实际是求解\(p(y=0|x)\)和\(p(y=1|x)\),然后比大小的过程。想要求得\(p(y|x)\)在训练模型时有两种方式:
训练\(p(y|x)\)模型(判别模型)
训练\(p(x|y)\)模型(生成模型)
判别模型:逻辑回归模型就是判别模型,看一下它模型的表达式:\(h_\theta (x) = \frac{1}{1 + e^{-\theta^Tx}}\),这个表达式求出的概率就是\(y=1\)的概率,即\(p(y=1|x) = h_\theta(x)\),\(p(y=0|x) = 1 - h_\theta(x)\)。可见判别模型是直接对\(p(y|x)\)进行训练。
生成模型:朴素贝叶斯就是生成模型,下面来看详细步骤。
条件概率公式:\(p(A|B) = \frac{p(A,B)}{p(B)}\),\(p(B|A) = \frac{p(A,B)}{p(A)}\)
可得出贝叶斯公式:\(p(A|B) = \frac{p(B|A)p(A)}{\sum_{A_i}p(A_i)p(B|A_i)}\)
把A和B换成更习惯的X和Y:
$$p(y|x) = \frac{p(x|y)p(y)}{\sum_{y_i} p(y_i)p(x|y_i)}$$
分析这个表达式,在机器学习中我们最终要求得的是\(p(y|x)\),使用该等式转化为求解等式右侧的值,等式右侧里包含两个未知的内容:\(p(x|y)\)和\(p(y)\)。其中\(p(y)\)很容易求得,直接使用训练集中\(y=1\)和\(y=0\)各自的频率作为概率就可以了。
现在对问题做了第一步转化:
原始问题:求解\(p(y|x)\)
转化后的问题:求解\(p(x|y)\)(还有一部分是求解\(p(y)\),比较简单,不再赘述)
训练模型\(p(x|y)\)
描述一下数据集:有\(m\)条数据,\(n\)个特征。并且满足如下假设:数据集的各个特征在给定\(y\)后条件独立。
把\(p(x|y)\)里的向量\(x\)按照\(n\)个特征展开:\(p(x|y) = p(x_1,x_2,x_3,... ...,x_n|y)\)。
由于数据集里各个特征条件独立,可以得出如下公式:
$$\begin{align} p(x|y) &= p(x_1,x_2,x_3,... ...,x_n|y) \\ &= p(x_1|y)p(x_2|y)p(x_3|y) ... ... p(x_n|y) \\ &= \prod_{i=1}^n p(x_i|y) \end{align}$$
PS:这里的符号有点混乱,\(p(x|y)\)里的\(x\)是一个向量,而公式后面的\(x_1,x_2,x_3,... ...,x_n\)就不是向量了,而是每个具体特征的取值。
接下来是求解\(p(x_i|y)\),在CS229的讲义里朴素贝叶斯是以垃圾邮件分类器为例进行讲解的,针对这个具体的情景,\(x_i\)的取值只有0和1,我们也以只有0、1两种取值进行说明。
$$p(x_j=0|y=0) = \frac{\sum_{i=1}^m I\{x_j=0 \land y=0\}}{\sum_{i=1}^m I\{y=0\}}$$
$$p(x_j=0|y=1) = \frac{\sum_{i=1}^m I\{x_j=0 \land y=1\}}{\sum_{i=1}^m I\{y=1\}}$$
$$p(x_j=1|y=0) = \frac{\sum_{i=1}^m I\{x_j=1 \land y=0\}}{\sum_{i=1}^m I\{y=0\}}$$
$$p(x_j=1|y=1) = \frac{\sum_{i=1}^m I\{x_j=1 \land y=1\}}{\sum_{i=1}^m I\{y=1\}}$$
为了完整性,把\(p(y)\)也写出来:
$$p(y=0) = \frac{\sum_{i=1}^m I\{y=0\}}{m}$$
$$p(y=1) = \frac{\sum_{i=1}^m I\{y=1\}}{m}$$
这样\(p(x|y)\)就可以求出来了。
整体思路概览
使用模型预测时是求解\(p(y|x)\);通过贝叶斯公式,将求解\(p(y|x)\)转化为求解\(p(x|y)\)和\(p(y)\);对数据集添加一个假设——特征之间条件独立,将\(p(x|y)\)转化为各个特征条件概率的乘积。
最后简单提一下另一个生成模型——高斯判别分析GDA
贝叶斯公式:
$$p(y|x) = \frac{p(x|y) p(y)}{p(x)}$$
给出一条新数据,预测最可能的y:
$$\begin{align} arg \; \displaystyle max_y p(y|x) &= arg \; max_y \frac{p(x|y) p(y)}{p(x)} \\ &= arg \; max_y p(x|y)p(y) \\ \end{align}$$
对于二分类,需要求得\(p(x|y=0)\)、\(p(x|y=1)\)、\(p(y)\)这三个即可,接下来的思路是我们假设\(p(x|y)\)符合某种概率分布(高斯分布、多项式分布等),然后使用数据集训练出该概率分布中的参数。
GDA就假设\(p(x|y=0)\)和\(p(x|y=1)\)符合高斯分布,\(p(y)\)符合伯努利分布:
$$y \;~\; Bernoulli(\phi)$$
$$x|y=0 \;~\; \mathcal{N}(\mu_0, \Sigma)$$
$$x|y=1 \;~\; \mathcal{N}(\mu_1, \Sigma)$$
然后就是拟合\(\phi\)、\(\mu_0\)、\(\mu_1\)、\(\Sigma\)这几个参数,模型就训练完成了。
这种训练模型的方法,最重要的地方就是我们假设原始数据集符合什么样的概率分布,这个只能靠一些先验知识。
2018-10-16添加:
朴素贝叶斯和高斯判别分析这两种生成模型都对原始数据集做了一定的假设:
朴素贝叶斯:假设给定\(y\)后所有的特征之间条件独立;
高斯判别分析:假设\(p(x|y)\)符合某种分布。