生成学习算法
学习算法模型 \(p(y|x;\theta)\) ,即给定\(x\)的\(y\)服从条件分布。例如,逻辑回归模型 \(p(y|x;\theta)\),\(h_\theta(x)=g(\theta^Tx)\),在这里\(g\)是\(sigmoid\)函数
考虑一个关于大象和狗的分类问题时,逻辑回归或感知器算法都是尝试找到一条直线来把两类分开,当有一个动物输入时,检查它是属于哪一边,然后预测它。
现在有一个不同的处理方法,首先,给大象建立一个模型,然后再迭代搜索狗,给狗建立一个模型。把新的动物与大像的模型和狗的模型进行匹配,来判断这个动物是大象还是狗。
即,分别给狗和大象建模,当有新的动物特征输入时,分别跟狗和大象的模型进行匹配,比较哪个模型更拟合,就属于哪种动物
直接学习\(p(y|x)\)的算法(逻辑回归)或直接学习\(X\)空间到标签{0,1}的映射算法(感知器算法)都被称为是判别学习算法。
生成算法:例如,y表示一个样本是狗(0)或大象(1),那么\(p(x|y=0)\)模型表示狗的特征分布,\(p(x|y=1)\)模型表示大象的特征分布。
在对\(p(y)\)(类先验概率)建模和\(p(x|y)\),我们的算法可以用贝斯叶规则来得到给定\(x\)的\(y\)的分布。
\[p(y|x)=\frac{p(x|y)p(y)}{p(x)}
\]
\[p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)
\]
\(p(x|y)\)是在给定类型(y)的条件下,特征(x)的概率模型。
\[\begin{align}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)\\\end{align}
\]
求出使\(p(y|x)\) 极大的\(y\),因为\(x\)相互独立,所以\(p(x)\)不影响\(y\)取值,可省略(注意,如果\(y\)是均匀分布,即每一个 \(p(y)\) 都相等,那么也可以省略\(p(y)\)),所以要求使 \(p(y|x)\) 极大的 \(y\) 值,相当于求使 \(p(x|y)p(y)\) 极大值的 \(y\) 值
1 高斯判别分析
首先假定 \(p(x|y)\) 是多元正态分布,下面说说多元正态分布是什么。
1.1 多元正态分布
\(n\) 维多元正态分布,也叫多元高斯分布,参数是一个均值向量 \(\mu\in \mathbb{R}^n\) (相当于每个高斯分布的对称轴) 和协方差矩阵 \(\Sigma\in \mathbb{R}^{n\times n}\) ,在这里 \(\Sigma\ge 0\) 。也可以写成是“ \(\mathcal{N}(\mu,\Sigma)\) ”,它的定义是:
\[p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))
\]
\(|\Sigma|\) 代表矩阵 \(\Sigma\) 的行列式
对于随机变量\(X\)服从分布\(\mathcal{N}(\mu,\Sigma)\),意思是给定 \(\mu\):
\[E[X]=\int_{x}xp(x;\mu,\Sigma)dx=\mu
\]
一个向量值随机变量 \(Z\) 的协方差用\(Cov(Z)=E[(Z-E[Z])(Z-E[Z])^T]\)定义。也可以这样定义:
\[Cov(Z)=E[ZZ^T]-(E[Z])(E[Z])^T
\]
如果\(X\sim\mathcal{N}(\mu,\Sigma)\),那么:
\[Cov(X)=\Sigma
\]
下面是一些关于高斯分布密度的例子:
![]()
\[\Sigma=\begin{bmatrix}1&0\\0&1\end{bmatrix};\Sigma=\begin{bmatrix}0.6&0\\0&0.6\end{bmatrix};\Sigma=\begin{bmatrix}2&0\\0&2\end{bmatrix};
\]
左图是 \(\mu=0\) 和协方差 \(\Sigma=I\) ( \(2\times2\) 标准矩阵)的高斯分布表现,也叫标准正态分布。中间的图是 \(\mu=0\) 和协方差 \(\Sigma=0.6I\) 的高斯分布表现,右图是 \(\Sigma=2I\) 。如果 \(\Sigma\) 比较大,则图比较“偏平”,如果比较小,则图比较“突出”
![]()
上图中协方差分别为:
\[\Sigma=\begin{bmatrix}1&0\\0&1\end{bmatrix};\Sigma=\begin{bmatrix}1&0.5\\0.5&1\end{bmatrix};\Sigma=\begin{bmatrix}1&0.8\\0.8&1\end{bmatrix};
\]
![]()
![]()
\[\Sigma=\begin{bmatrix}1&-0.5\\-0.5&1\end{bmatrix};\Sigma=\begin{bmatrix}1&-0.8\\-0.8&1\end{bmatrix};\Sigma=\begin{bmatrix}3&0.8\\0.8&1\end{bmatrix};
\]
保证 \(\Sigma=I\),改变 \(\mu\)
![]()
\[\mu = \begin{bmatrix}1\\0\end{bmatrix};\mu = \begin{bmatrix}-0.5\\0\end{bmatrix};\mu = \begin{bmatrix}-1\\-1.5\end{bmatrix};
\]
1.2 高斯判别分析模型
处理分类问题时,如果输入特征\(x\)是连续值随机变量,那么可以使用高斯判别分析(GDA)模型,该模型的 \(p(x|y)\) 使用多元正态分布。模型是:
\[y\sim Bernoulli(\phi)\\x|y=0\sim \mathcal{N}(\mu_0,\Sigma)\\x|y=1\sim\mathcal{N}(\mu_1,\Sigma)
\]
\(p(x|y)\) 的分布公式:
\[p(y)=\phi^y(1-\phi)^{1-y}
\]
\[p(x|y=0)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0))
\]
\[p(x|y=1)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1))
\]
在这里,模型参数是 \(\phi,\Sigma,\mu_0和\mu_1\),\(\mu_0\) 代表 \(y=0\) 时的 \(x\) 的期望,\(\mu_0\) 代表 \(y=1\) 时的 \(x\) 的期望,一个协方差 \(\Sigma\) (因为特征 \(X\) 的协方差不会受到 \(y\) 值的影响,所以不管是 \(y=0\) 或 \(y=1\) 时,都可以用同一个 \(\Sigma\) )。数据的对数似然(为了简化公式,后面公式不带上 \(\mu_0,\mu_1,\phi,\Sigma\) ):
\[\begin{align}\ell(\phi,\mu_0,\mu_1,\Sigma)
&=log\prod_{i=1}^m p(x^{(i)},y^{(i)};\phi,\mu_0,\mu_1,\Sigma)\\
&=log\prod_{i=1}^m p(x^{(i)}|y^{(i)};\mu_0,\mu_1,\Sigma)p(y^{(i)};\phi)\\
&=\sum_{i=1}^m log \ p(x^{(i)}|y^{(i)}) + \sum_{i=1}^m log \ p(y^{(i)})\\
&=\sum_{i=1}^m log \ (p(x^{(i)}|y^{(i)}=0)^{1-y^{(i)}}*p(x^{(i)}|y^{(i)}=1)^{y^{(i)}}) + \sum_{i=1}^m log \ p(y^{(i)})\\
&=\sum_{i=1}^m (1-y^{(i)})log\ p(x^{(i)}|y^{(i)}=0)+\sum_{i=1}^m y^{(i)}log\ p(x^{(i)}|y^{(i)}=1) \\+\sum_{i=1}^m log \ p(y^{(i)})
\end{align}\]
\(\ell\) 极大化:
\(\ell\) 对 \(\phi\) 求偏导,注意 \(\phi\) 只与 \(\ell\) 第三部分有关:
\[\begin{align}\frac{\partial}{\partial\phi}\ell(\phi,\mu_0,\mu_1,\Sigma)
&=\frac{\partial}{\partial\phi}\sum_{i=1}^m log \ p(y^{(i)})\\
&=\frac{\partial}{\partial\phi}\sum_{i=1}^m log\left(\phi^{(y^i)}(1-\phi)^{(1-y^i)}\right)\\
&=\frac{\partial}{\partial\phi}\sum_{i=1}^m \left(y^ilog\ \phi+(1-y^i)log \ (1-\phi)\right)\\
&=\sum_{i=1}^m \left(y^i\frac{1}{\phi}-(1-y^i)\frac{1}{(1-\phi)}\right)\\
&=\sum_{i=1}^m \left(1\left\{y^i=1\right\}\frac{1}{\phi}-1\left\{y^i=0\right\}\frac{1}{(1-\phi)}\right)
\end{align}\]
令上式为0,求解得:
\[\phi=\frac{\sum_{i=1}^m 1\left\{y^{i}=1\right\}}{\sum_{i=1}^m 1\left\{y^{i}=1\right\}+\sum_{i=1}^m 1\left\{y^{i}=0\right\}}=\frac{1}{m}\sum_{i=1}^m 1\left\{y^{i}=1\right\}
\]
\(\ell\) 对 \(\mu_0\) 求偏导,注意 \(\mu_0\) 只与 \(\ell\) 第一部分有关:
\[\begin{align}\frac{\partial}{\partial\mu_0}\ell(\phi,\mu_0,\mu_1,\Sigma)
&=\frac{\partial}{\partial\mu_0}\sum_{i=1}^m(1-y^{(i)})log\ p(x^{(i)}|y^{(i)}=0)\\
&=\frac{\partial}{\partial\mu_0}\sum_{i=1}^m 1\left\{y^{(i)}=0\right\}*\\&log\left(\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x^{(i)}-\mu_0)^T\Sigma^{-1}(x^{(i)}-\mu_0))\right)\\
&=\frac{\partial}{\partial\mu_0}\sum_{i=1}^m 1\left\{y^{(i)}=0\right\}\left(-\frac{1}{2}(x^{(i)}-\mu_0)^T\Sigma^{-1}(x^{(i)}-\mu_0)\right)\\
&=\sum_{i=1}^m 1\left\{y^{(i)}=0\right\}(\Sigma^{-1}(x^{(i)}-\mu_0))
\end{align}\]
上式中,因为 \(\Sigma\) 是对称的。对于对称矩阵X,和向量A有: \(A^TX=XA\) 。所以上式第四步可求得第五步。
令公式等于0,得
\[\mu_0=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{y^{i}=0\right\}x^{(i)}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{i}=0\right\}\end{matrix}}
\]
同理求得:
\[\mu_1=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{y^{i}=1\right\}x^{(i)}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{i}=1\right\}\end{matrix}}
\]
同样对 \(\Sigma\) 求偏导后得:
\[\Sigma=\frac{1}{m}\sum_{i=1}^m (x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T
\]
对应的算法绘图如下:
![]()
最后,结合公式:
\[p(y|x)=\frac{p(x|y)p(y)}{p(x)}
\]
\[p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)
\]
可得到\(p(y|x)\)
1.3 GDA和逻辑回归
计算公式关于\(x\)的一个函数\(p(y=1|x;\phi,\mu_0,\mu_1,\Sigma)\),展开后发现:
\[p(y=1|x;\phi,\mu_0,\mu_1,\Sigma)=\frac{1}{1+exp(-\theta^Tx)}
\]
如果\(p(x|y)\)是多元高斯分布,那么\(p(y|x)\)服从逻辑函数,反之则不正确,因此多元高斯分布(GDA)具有更强的假设。
在处理少数量的训练集时,多元高斯分布(GDA)会更有效;在处理数量大的训练集时,用逻辑回归处理会更强壮和不会太受建模假设影响。
如果\(x|y=0\sim Poisson(\lambda_0)\)和\(x|y=1\sim Poisson(\lambda_1)\),那么\(p(y|x)\)服从逻辑回归。
总结:GDA能用强的模型假设,不是高斯分布的数据集,并且数据量很大的时候,用逻辑回归会更好。
(ps:\(p(x|y)\sim ExpFamiler(\phi)\),那么\(p(y|x)\)是逻辑回归函数)
2 朴素贝叶斯
GDA的特征向量\(x\)是连续的实数向量。现在介绍带有离散的\(x_i\)的学习算法。
用一个特征向量表示一封邮件,特征向量的长度等于字典里词的数量。如果一封邮件里包含字典中的第\(i\)个词,那么,就设\(x_i=1\),否则,设置\(x_i=0\)。
\[x=\begin{matrix}\begin{bmatrix}1\\0\\0\\\vdots\\1\\\vdots\\0\\\end{bmatrix}\begin{align}&a\\&aardvark\\&aardwolf\\&\vdots\\&buy\\&\vdots\\&zygmurgy\\\end{align}\end{matrix}
\]
表示邮件有“a”和“buy”但是没有“aardvark”,“aardwolf”或“zygmurgy”。一组词编进一个特征向量被称为词表,所以\(x\)的维数等于词表的大小。
现在如果要建立生成学习模型\(p(x|y)\),但是词表有50000个词,所以\(x\in\left\{0,1\right\}^{50000}\)(\(x\)是50000维向量,其中每个值是0或1),如果现在用多元正态分布对\(x\)建模,那么就是有\(2^{50000}\)种可能结果,就是要用\((2^{50000}-1)\)维参数向量。参数量十分庞大。
为了建模\(p(x|y)\),使用一个强假设,假设给定\(y\)得到的\(x_i\)是相互独立的。该假定被称为朴素贝叶斯(NB)假设,结果算法被称为朴素贝叶斯分类器。
因为\(x\)相互独立,所以\(p(x_2|y)=p(x_2)|y,x_1\)。
所以有:
\[\begin{align}p(x_1,\dots,x_{50000}|y)\\&=p(x_1|y)p(x_2|y,x1)p(x_3|y,x_1,x_2)\dots p(x_{50000}|y,x_1,\dots,x_{49999})\\&=p(x_1|y)p(x_2|y)p(x_3|y)\dots p(x_{50000}|y)\\&=\coprod_{i=1}^n p(x_i|y)\end{align}
\]
模型参数\(\phi_{i|{y=1}}=p(x_i=1|y=1)\),\(\phi_{i|{y=0}}=p(x_i=1|y=0)\)和\(\phi_y=p(y=1)\),给定一个训练集\(\left\{(x^{(i)},y^{(i)});i=1,\dots,m\right\}\),我们写下数据的joint似然性:
\[\mathcal{L}(\phi_y,\phi_{j|{y=0}},\phi_{j|{y=1}})=\coprod_{i=1}^m p(x^{(i)},y^{(i)})
\]
最大化上式关于\(\phi_y,\phi_{j|{y=0}}和\phi_{j|{y=1}}\)给出了最大似然评估:
\[\phi_{j|{y=1}} = \frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_y^{(i)}=1\land y^{(i)}=1\right\}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}\end{matrix}}
\]
\[\phi_{j|{y=0}} = \frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_y^{(i)}=1\land y^{(i)}=0\right\}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=0\right\}\end{matrix}}
\]
\[\phi_y=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}\end{matrix}}{m}
\]
\(\phi_{j|{y=1}}\)表示(\(y=1\))垃圾邮件中第j个词出现的次数除以(\(y=1\))垃圾邮件数,即(\(y=1\))垃圾邮件中第j个词出现的概率。当把所有的参数都填充后,要预测一个新的样本特征\(x\)时,需要简单计算:
\[\begin{align}p(y=1|x)&=\frac{p(x|y=1)p(y=1)}{p(x)}\\&=\frac{(\begin{matrix}\coprod_{i=1}^n p(x_i|y=1))p(y=1)\end{matrix}}{\begin{matrix}\coprod_{i=1}^n p(x_i|y=1))p(y=1)+\coprod_{i=1}^n p(x_i|y=0))p(y=0)\end{matrix}}\\\end{align}
\]
2.1 Laplace smoothing
垃圾邮件过滤器里,如果出现一个新词,在过去的训练集中没有出现过,假如这个词在字典里是第35000个,那么:
\[\phi_{35000|y=1}=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_{35000}^{(i)}=1\land y^{(i)}=1\right\}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}\end{matrix}}=0
\]
\[\phi_{35000|y=0}=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_{35000}^{(i)}=1\land y^{(i)}=0\right\}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=0\right\}\end{matrix}}=0
\]
因此,当要检查一封有该新词的邮件是否是垃圾邮件时,计算该类的后验概率:
\[\begin{align}p(y=1|x) & = \frac{\begin{matrix} \prod_{i=1}^n p(x_i|y=1)p(y=1) \end{matrix}}{\begin{matrix} \prod_{i=1}^n p(x_i|y=1)p(y=1) \end{matrix} + \begin{matrix} \prod_{i=1}^n p(x_i|y=0)p(y=0) \end{matrix}}\\ &= \frac{0}{0}\\\end{align}
\]
上式不能检测出该邮件是否为垃圾邮件,因此,我们改变一下多元项的\(\phi_i=p(z=i)\)形式,原来是:
\[\phi_y = \frac{\begin{matrix} \sum_{i=1}^m 1 \left\{z^{(i)}=j \right\} \end{matrix}}{m}
\]
改成Laplace smoothing:
\[\phi_y = \frac{\begin{matrix} \sum_{i=1}^m 1 \left\{z^{(i)}=j \right\} \end{matrix} + 1}{m + k}
\]
\(\begin{matrix} \sum_{j=1}^k \phi_j=1 \end{matrix}\)依然有效。
回到垃圾邮件过滤器,使用Laplace smoothing:
\[\phi_{35000|y=1}=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_{35000}^{(i)}=1\land y^{(i)}=1\right\}\end{matrix} + 1}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}\end{matrix} + 2}
\]
\[\phi_{35000|y=0}=\frac{\begin{matrix} \sum_{i=1}^m 1\left\{x_{35000}^{(i)}=1\land y^{(i)}=0\right\}\end{matrix} + 1}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=0\right\}\end{matrix} + 2}
\]
实际上是否把Laplace smoothing应用到\(\phi_y\)没多大关系。
2.2 文本分类器的事件模型
多元事件模型:\(x_i\)代表邮件中第\(i\)个词在字典中的下标。因此\(x_i \in \left\{1,\dots,|V|\right\}\),其中,\(|V|\)是字典的大小。n个词的邮件用\((x_1,x_2,\dots,x_n)\)表示,其中n在每个样本中都不一样。因此,一个信息的整体概率应该是:
\[p(x^{(i)})=p(y) \begin{matrix} \prod_{i=1}^n p(x_i|y)\end{matrix}
\]
其中的\(x_i|y\)与多元项伯努利事件模型不一样,这里的\(x_i|y\)是多元的,而不是伯努利分布,即x不是\(\in \left\{0,1\right\}\),而是\(\in \left\{0,1,\dots,|V|\right\}\)。
给定一个训练集\(\left\{(x^{(i)},y^{(i)});i=1,\dots,m\right\}\),在这里\(x^{(i)}=(x_1^{(i)},x_2^{(i)},\dots,x_{n_i}^{(i)})\)(\(n_i\)代表第i个邮件样本的词的总数量,每一个元素代表该词在字典中的下标值。),可得:
\[\begin{align} \mathcal{L}(\phi,\phi_{k|y=0},\phi_{k|y=1}) & =\coprod_{i=1}^m p(x^{(i)},y^{(i)})\\& = \coprod_{i=1}^m \left(\coprod_{j=1}^{n_i} p(x_j^{(i)}|y;\phi_{k|y=0},\phi_{k|y=1})\right)p(y^{(i)};\phi_y)\\\end{align}
\]
最大化参数的最大似然评价:
\[\phi_{k|y=1}=\frac{\begin{matrix} \sum_{i=1}^m \begin{matrix} \sum_{j=1}^{n_i} 1\left\{x_j^{(i)}=k \land y^{(i)}=1 \right\} \end{matrix}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}n_i \end{matrix}}
\]
\[\phi_{k|y=0}=\frac{\begin{matrix} \sum_{i=1}^m \begin{matrix} \sum_{j=1}^{n_i} 1\left\{x_j^{(i)}=k \land y^{(i)}=0 \right\} \end{matrix}\end{matrix}}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=0\right\}n_i \end{matrix}}
\]
\[\phi_y = \frac{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\} \end{matrix}}{m}
\]
其中\(\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}n_i \end{matrix}\)是邮件为垃圾邮件的词的总数,\(\begin{matrix} \sum_{i=1}^m \begin{matrix} \sum_{j=1}^{n_i} 1\left\{x_j^{(i)}=k \land y^{(i)}=1 \right\} \end{matrix}\end{matrix}\)表示所有垃圾邮件中,词下标为k的词的数量。因此\(\phi_{k|y=1}\)是垃圾邮件中,词下标为k出现的概率。
如果应用了Laplace smoothing,则
\[\phi_{k|y=1}=\frac{\begin{matrix} \sum_{i=1}^m \begin{matrix} \sum_{j=1}^{n_i} 1\left\{x_j^{(i)}=k \land y^{(i)}=1 \right\} \end{matrix}\end{matrix} + 1}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=1\right\}n_i \end{matrix} + |V|}
\]
\[\phi_{k|y=0}=\frac{\begin{matrix} \sum_{i=1}^m \begin{matrix} \sum_{j=1}^{n_i} 1\left\{x_j^{(i)}=k \land y^{(i)}=0 \right\} \end{matrix}\end{matrix} + 1}{\begin{matrix} \sum_{i=1}^m 1\left\{y^{(i)}=0\right\}n_i \end{matrix} + |V|}
\]