蘑菇先生学习记

生成算法

  这篇笔记主要针对斯坦福ML公开课的第五个视频,主要内容包括生成学习算法(generate learning algorithm)、高斯判别分析(Gaussian Discriminant Analysis)、朴素贝叶斯(Navie Bayes)、拉普拉斯平滑(Laplace Smoothing)。

生成学习算法概述

  到目前为止,我们学习的方法主要是直接对问题进行求解,比如二分类问题中的感知机算法和逻辑回归算法,都是在解空间中寻找一条直线从而把两种类别的样例分开,对于新的样例只要判断在直线的哪一侧即可,这种截至对问题求解的方法可以称作判别学习方法(discriminative learning algorithm)。判别学习方法的任务是训练如下模型:
$$p(y|x;\theta)$$

即在给定特征x的情况下,我们直接求出y的条件概率作为模型的输出。例如逻辑回归中,我们将\(h_\theta(x)=g(\theta^Tx)\)作为模型\(p(y|x;\theta)\)的结果。也就是说,判别方法并不关心数据长什么样子,它直接面向分类任务,只关心数据之间的区别或者差异,然后利用学习到的区别来对样本做出预测。
  而生成学习算法则是试图弄清楚数据是怎样产生的,每种数据的分布规律是怎样的,例如二分类问题中,生成学习算法对两个类别分别进行建模,用新的样例去匹配两个模型,匹配度较高的作为新样例的类别。比如良性肿瘤与恶性肿瘤分类,首先对两个类别分别建模,比如分别计算两类肿瘤是否扩散的概率,计算肿瘤大小大于某个值的概率;再比如狗与大象的分类,分别对狗与大象建模,比如计算两种类别体重大于某个值的概率,鼻子长度大于某个值的概率等等。即,每种特征都计算在不同类别下的概率,后面我们会讲到,可以利用朴素贝叶斯假设,每种特征在不同类别下的概率的累积可以作为\(P(x|y)\)的结果,即\(P(x|y)=\prod_{j=1}^n p(x_j|y)\), n是特征的数量,j是特征的下标。
  形式化的说,判别学习方法是直接对\(p(y|x)\)进行建模,或者直接学习输入空间到输出空间的映射关系,其中x是类样本的特征,y是某类样本的分类标记。而生成学习方法是对\(p(x|y)\)(条件概率)和\(p(y)\)(先验概率)进行建模,然后依照贝叶斯法则求出后验概率\(p(y|x)\):
$$p(y|x)=\frac{p(x|y)p(y)}{p(x)}$$
使得后验概率最大的类别y即是新样本的预测值:
$$\mathop{argmax}\limits_y p(y|x)=\mathop{argmax}\limits_y \frac{p(x|y)p(y)}{p(x)}=\mathop{argmax}\limits_y p(x|y)p(y)$$
  这个式子直观上也很好理解:比如我们在马路边远远地望到一个小动物,你想要判断它是一只狗还是一只鹿。首先,你肯定是要观察它的特征,然后根据你之前已经建立的经验,把它分别与狗和鹿的特征相对比,看更像哪个,也就是利用条件概率p(x|y)。然而距离太远了,根据你现在能够观察到的来看,可能和两者的特征都很符合。这个时候如果要让你作出判断的话,我想大多数人都会认为这个在马路边出现的动物是狗。为什么呢?因为狗在城市中更为常见,先验概率p(y=dog)的值更大。在这个过程中,我们便是同时利用了条件概率和先验概率来作出判断的。
  注意,虽然在这个公式中也出现了\(p(y|x)\),但它和判别模型中要预测的\(p(y|x;θ)\)是不同的。判别模型中我们直接计算出了\(p(y|x;θ)\)的大小,并把它作为预测结果的概率。而在生成模型中,我们是通过选取不同的y,来得到一个最大的\(p(y|x)\),也就是看哪种类别会令测试样本出现的概率最大,把这种类别对应的y值作为预测结果。

高斯判别分析

  高斯判别分析(GDA)是其中一种生成学习算法。虽然它的名字里有判别两字,但却是生成学习算法。
  在GDA中,假设\(p(x|y)\)属于多变量正态分布(multivariate normal distribution)。

多变量正态分布

  多变量正态分布是正态分布在多维变量下的扩展,它的参数是一个均值向量(mean vector) \(\mu\)和协方差矩阵(covariance matrix) \(\Sigma \sim \mathbb{R}^{n*n}\),其中n是多维变量的向量长度,\(\Sigma\)是对称正定矩阵。也写作,\(N(\mu,\Sigma)\),多变量正态分布的概率密度函数为:
$$p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp\left(-\frac{1}{2}(x-\mu)^T \Sigma^{-1}(x-\mu) \right)$$
  其中,\(|\Sigma|\)是行列式的值。
  对于服从多变量正态分布的随机变量x,均值由下面的公式给出:
$$E[X] = \int_x xp(x;\mu,\Sigma)dx = \mu$$
  协方差矩阵由协方差函数Cov得到,如果 \(X \sim N(\mu,\Sigma)\),则:
$$Cov(X)=\Sigma$$
  其中,Cov的计算过程为:
$$Cov(Z)=E[(Z-E[Z])(Z-E[Z])^T]=E[ZZ^T]-(E[Z])(E[Z])^T$$
  下图是部分多元正态分布概率密度函数图:
gda
  最左边代表\(\mu\)为0(\(\mu\)是2*1规格的零向量),并且协方差矩阵\(\Sigma=I\)(\(\Sigma\)为2*2的单位矩阵)。这也称作标准正态分布。中间那幅密度函数图代表零均值,\(\Sigma=0.6I\),最右边代表零均值,\(\Sigma=2I\).我们可以看出随着\(\Sigma\)对角元素变大,密度函数变得更扁平分散(spread-out),随着其变小,则变得更瘦高集中(compressed)。
下图是当协方差矩阵不是单位矩阵倍数时的情况:
gda
两幅图的\(\Sigma\)分别为:
$$\Sigma_1=\begin{bmatrix} 1 0.5 \\\ 0.5 1\end{bmatrix} \\\\
\Sigma_2=\begin{bmatrix} 1 0.8 \\\ 0.8 1\end{bmatrix}
$$
可以看出随着反对角元素的增大,密度函数往45°方向变得更加的瘦高集中(compressed)。我们可以通过观察下图的等高线图来对比:
gda
  实际上,对于一个二维向量,\(\Sigma\)的非对角元素表示了两个分量之间的相关性,而主对角元素则是各分量本身的方差,即:
$$\Sigma=\begin{bmatrix} E[(X_1-\mu_1)^2] E[(X_1-\mu_1)(X_2-\mu_2)] \\\ E[(X_2-\mu_2)(X_1-\mu_1)] E[(X_2-\mu_2)^2] \end{bmatrix} = \begin{bmatrix} \sigma_1^2 \sigma_{12}^2 \\\ \sigma_{21}^2 \sigma_2^2 \end{bmatrix}$$
  显然对于上图,右边的图因为反对角数字更大,即相关性更强。则横轴变量变大时,右图的纵轴变量变化比左图大,即右图相关性更强。实际上可以体现出数据更集中,故右图在图形上体现出更加瘦高。

GDA模型

  GDA模型针对的是输入特征为连续值时的分类问题。这个模型的基本假设是目标值y服从伯努利分布,条件概率\(p(x|y)\)服从多元正态分布。即:
$$y \sim Bernoulli(\phi) \\\\
(x|y=0) \sim N(\mu_0, \Sigma) \\\\
(x|y=1) \sim N(\mu_1, \Sigma)
$$
于是它们的概率密度为:
$$p(y)=\phi^y(1-\phi)^{1-y} \\\\
p(x|y=0)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp\left(-\frac{1}{2}(x-\mu_0)^T \Sigma^{-1}(x-\mu_0) \right) \\\\
p(x|y=1)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp\left(-\frac{1}{2}(x-\mu_1)^T \Sigma^{-1}(x-\mu_1) \right)
$$
我们模型的参数包括,\(\phi, \Sigma, \mu_0, \mu_1 \).注意到,我们使用了两种不同的均值向量\(\mu_0和\mu_1\),但是使用了同一种协方差矩阵\(\Sigma\), 则我们的极大似然函数的对数如下所示:
$$L(\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)};\phi,\mu_0,\mu_1,\Sigma)p(y^{(i)};\phi)$$
对极大似然函数对数最大化,我们就得到了GDA模型各参数的极大虽然估计,即得到了如何使用GDA算法的方法,各参数极大似然估计如下:
$$\phi = \frac{1}{m}\sum_{i=1}^m I\{y^{(i)}=1\} \\\ \\\\
\mu_0 = \frac{\sum_{i=1}^m I\{y^{(i)}=0\} x^{(i)}}{\sum_{i=1}^m I\{y^{(i)}=0\}} \\\ \\\\
\mu_1 = \frac{\sum_{i=1}^m I\{y^{(i)}=1\} x^{(i)}}{\sum_{i=1}^m I\{y^{(i)}=1\}} \\\ \\\\
\Sigma = \frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T
$$
上述\(\mu_0\)代表类别为0的样本中,所有变量组成的均值向量。\(\mu_1\)代表类别为1的样本中,所有变量组成的均值向量,\(x^{(i)}\)实际上就是一个样本向量,\(\mu_{y^{(i)}}\)是指每个样本需要根据其类别来选择均值向量。
上述第一个式子可以由伯努利的最大似然估计得到,后面的三个式子在后一节里将进行详细推导。
一个二维GDA模型的例子如下图所示:
gda
注意到两个二维高斯分布分别对两类数据进行拟合,它们使用相同的协方差矩阵,但却有不同的均值,在直线所示的部分,\(p(y=1|x)=(y=0|x)=0.5\)

多元正态分布参数估计推导

  我们想证明:多元正态分布的参数\(\mu,\Sigma\)可由最大似然法求出,即:
$$\hat{\mu}=\overline{X}, \hat{\Sigma}=\frac{1}{m}S$$
其中,S为样本协方差矩阵,\(\overline{X}为样本均值向量\)
设,\(X_{(1)},X_{(2)},…,X_{(m)}\)来自正态总体\(N_n(\mu,\Sigma)\)容量为m的样本,每个样本\(X_{(a)}=(X_{a1},X_{a2},…,X_{an})^T,a=1,2,…,m\),
其中,m为样本容量,n为变量个数。构造似然函数:
$$
L(\mu,\Sigma)=\prod_{i=1}^m f(X_i, \mu, \Sigma)=\frac{1}{(2\pi)^{nm/2}|\Sigma|^{m/2}}exp\left(-\frac{1}{2}\sum_{i=1}^m(X_i-\mu)^T \Sigma^{-1}(X_i-\mu) \right)
$$
两边取对数,得到:
$$log(\mu,\Sigma)=-\frac{1}{2}nm log(2\pi)-\frac{m}{2}log|\Sigma| \\\\
-\frac{1}{2}\sum_{i=1}^m(X_i-\mu)^T\Sigma^{-1}(X_i-\mu)
$$
因为对数函数为严格单调递增函数,所以可以通过极大值求参数估计量。
根据矩阵代数理论:对于实对称矩阵A,我们有:
$$\frac{\partial(X^TAX)}{\partial X} = 2AX \\\\
\frac{\partial(X^TAX)}{\partial A} = XX^T \\\\
\frac{\partial log(|A|)}{\partial A} = A^{-1}
$$
这里的\(\Sigma\)就是实对称矩阵,分别对\(\mu,\Sigma\)求偏导,则有:
$$
\frac{\partial log L(\mu,\Sigma)}{\partial \mu} = \sum_{i=1}^m \Sigma^{-1}(X_i-\mu)=0 \\\\
\frac{\partial log L(\mu,\Sigma)}{\partial \Sigma} = -\frac{m}{2}\Sigma^{-1}+\frac{1}{2}\sum_{i=1}^m(X_i-\mu)(X_i-\mu)^T(\Sigma^{-1})^2=0
$$
则:
$$
\hat{\mu} = \frac{1}{m}\sum_{i=1}^m X_i = \overline{X} \\\\
\hat{\Sigma} = \frac{1}{m}\sum_{i=1}^m (X_i-\overline{X})(X_i-\overline{X})^T=\frac{1}{m}S
$$

GDA模型与logistic模型的关系

前面我们提到:
$$\mathop{argmax}\limits_y p(y|x)=\mathop{argmax}\limits_y \frac{p(x|y)p(y)}{p(x)}=\mathop{argmax}\limits_y p(x|y)p(y)$$
我们有:
$$p(y=1|x)=\frac{p(x|y=1)p(y=1)}{p(x|y=1)p(y=1)+p(x|y=0)p(y=0)}$$
上式实际上可以表示成logistic函数的形式:
$$p(y=1|x;\phi,\mu_0,\mu_1,\Sigma)=\frac{1}{1+exp(-\theta^T X)}$$
  其中,\(\theta是参数\phi,\mu_0,\mu_1,\Sigma\)某种形式的函数。GDA的后验分布可以表示logistic函数的形式。
  实际上,可以证明,不仅仅当先验概率分布服从多变量正态分布时可以推导出逻辑回归的模型,当先验分布属于指数分布簇中的任何一个分布,如泊松分布时,都可以推导出逻辑回归模型。而反之不成立,逻辑回归的先验概率分布不一定必须得是指数分布簇中的成员,因此也可以说明logistic在建模上的鲁棒性。
  因此推导逻辑回归模型有两种方法。第一种是之前提到的通过指数分布簇来推导,第二种则是通过生成学习假设先验概率分布的方式进行推导。
  那么如何选择GDA与logistic回归模型呢?由上面的分析可以知道,GDA与logistic回归是泛化与特化的关系.GDA比logistic回归有更强的前置假设。当数服从或大致服从正态分布时,使用GDA会达到更好的效果,因为利用了更多的信息构建模型。但当数据不服从正态分布时,那么logistic回归更有效,因为它做出了更弱的假设,构建的模型更加鲁棒性。生成学习还有另外一个好处,就是可以使用比判别模型更少的数据构建出更鲁棒的模型。

朴素贝叶斯

  GDA针对的是特征向量X为连续值时的问题。而朴素贝叶斯Navie Bayes则针对的是特征向量为离散值时的问题。
  NB算法的常见的应用是文本分类问题,例如邮件是否为垃圾邮件的分类问题。
  对于文本分类问题来说,使用向量空间模型VSM来表示文本。何为VSM?首先,我们需要有一个词典,词典可以是现有词典,也可以从数据中统计出来的词典,对于每个文本,我们用长度等于词典大小的向量表示,如果文本包含某个词,则该词在词典中的索引为index,则表示文本向量的index出设为1,否则设为0。该方法对应多元伯努利分布。
  如果按直接对p(x|y)进行建模,那么会遇到参数过多的问题,我们假设词典有50000个词,则向量长度为50000,向量中每个分量的取值为{0,1},那么可能有\(2^50000\)个可能的结果,如果我们使用多项式分布对这\(2^50000\)个可能的结果进行建模,则对其建模需要\(2^50000-1\)个参数。这里仍然存在着一点疑问?为什么参数个数不是50000,而是\(2^50000-1\)呢?个人理解是,这里所说的是指对X建模, 暂时没有考虑y的因素。那么相当于我们需要计算每种X组合出现的概率。
原话如下图所示:
gda
  朴素贝叶斯假设是在给定分类y后,假设特征向量中各个分量是条件独立的。例如对于垃圾邮件,即y=1,”购买”是第2087个词,“价格”是第39831个词,假设已经告诉了我们某个邮件是垃圾邮件,即y=1, 那么\(x_{2087}\)不会对\(x_{39831}\)的值产生任何影响。更正式的,这可以写作:\(p(x_{2087}|y)=p(x_{2087}|y,x_{39831})\)。注意我们不是说\(x_{2087}和x_{39831}\)是相互独立的,即不是指\(p(x_{2087})=p(x_{2087}|x_{39831})\),而只是假设在给定y的情况下,\(x_{2087}和x_{39831}\)是条件独立的。现在我们有:
$$p(x_1,…,x_{50000}|y)=p(x_1|y)p(x_2|y,x_1)p(x_3|y,x_1,x_2)…p(x_{50000}|y,x_1,x_2,…,x_{49999}) \\\\
= p(x_1|y)p(x_2|y)p(x_3|y)…p(x_{50000}|y) \\\\
= \prod_{i=1}^n p(x_i|y)
$$
第一个等式是根据通常的概率论得到的,第二个等式是根据贝叶斯假设得到的。虽然贝叶斯假设是个很强的假设,但是实践证明在许多问题上都表现得很好。
我们得到了NB方法的参数:
$$\phi_y=p(y=1) \\\\
\phi_{j|y=1} = p(x_j=1|y=1) \\\\
\phi_{j|y=0} = p(x_j=1|y=0)
$$
这里的\(\phi\)是向量,向量的分量代表每个特征项伯努利分布的参数值,实际上就是每个特征项出现的概率组成的向量。我们需要求出每个特征项在类别为0下出现的概率值和类别为1下出现的概率值。
于是,我们就得到NB方法的极大似然估计的对数函数:
$$L(\phi_y,\phi_{j|y=1},\phi_{j|y=0})=\prod_{i=1}^m p(x^{(i)},y^{(i)})=\prod_{i=1}^m p(x^{(i)}|y^{(i)})p(y^{(i)}) \\\\
=\prod_{i=1}^m \left(\prod_{j=1}^n p(x_j^{(i)}|y^{(i)})\right)p(y^{(i)})
$$
其中,n为词典的大小,也就是特征项的数目。m为样本的数量,也就是邮件数。第一个式子是根据极大似然估计方法得到的,第二个式子中\(p(x^{(i)}|y^{(i)})=\left(\prod_{j=1}^n p(x_j^{(i)}|y^{(i)})\right)\)是根据朴素贝叶斯假设得到的。j是特征项的下标。我们假设\(p(x_j|y)\)满足伯努利分布,因为特征项只取0和1,那么根据伯努利分布的最大似然估计:
我们得到如下参数的极大似然估计:
$$\phi_y = \frac{\sum_{i=1}^m I\{y^{(i)}=1\}}{m} \\\ \\\ \phi_{j|y=1} = \frac{\sum_{i=1}^m I\{x_j^{(i)}=1 \wedge y^{(i)}=1\}}{\sum_{i=1}^m I\{y^{(i)}=1\}} \\\ \\\ \phi_{j|y=0} = \frac{\sum_{i=1}^m I\{x_j^{(i)}=1 \wedge y^{(i)}=0\}}{\sum_{i=1}^m I\{y^{(i)}=0\}}$$
  其中,\(\wedge\)代表并且,\(\phi_y\)是类别y的先验概率,二分类问题就是2*1的向量。\(\phi_{j|y=1}\)是类别为1的情况下,各个特征项参数组成的向量,也即各个特征项出现的概率组成的向量。\(\phi_{j|y=0}\)是类别为0的情况下,各个特征项参数组成的向量,也即各个特征项出现的概率组成的向量。\(x_j^{(i)}\)代表第i个样本的第j个特征项的值。
  对于新样本,按照如下公式计算其后验概率值:
$$p(y=1|x)=\frac{p(x|y=1)p(y=1)}{p(x)}=\frac{p(x|y=1)p(y=1)}{p(x|y=1)p(y=1)+p(x|y=0)p(y=0)}=\frac{(\prod_{j=1}^n p(x_j|y=1))p(y=1)}{(\prod_{j=1}^n p(x_j|y=1))p(y=1)+(\prod_{j=1}^n p(x_j|y=0))p(y=0)}$$
我们可以将上述特征项的取值扩展到{0,1,2…,k},而\(p(x_j|y)\)的概率分布由伯努利分布变为多项式分布,对于一些连续的变量,我们可以将其离散化后使其可以用NB方法解决,例如离散化方法可以是通过将连续变量按值分段实现。

拉普拉斯平滑

  拉普拉斯平滑(Laplace Smoothing)又称为加1平滑。平滑方法的存在是为了解决零概率问题。
  所谓的零概率问题,就是在计算新实例的概率时,如果某个分量在训练集中从没出现过,会导致整个实例的概率计算结果为0,针对文本分类问题就是当一个词语在训练集中没有出现过,那么该词语的概率为0,使用连乘计算文本出现的概率时,整个文本出现的概率也为0,这显然不合理,因为不能因为一个事件没有观测到就判断该事件的概率为0.
  对于一个随机变量z,它的取值范围为{1,2,3,…,k},对于m次试验后的观测结果\({z^{(1)},z^{(2)},z^{(3)},…,z^{(m)}} \),极大似然估计按照下式计算:
$$\phi_j=\frac{\sum_{i=1}^m I(z^{(i)}=j)}{m}$$
使用Laplace平滑后,计算公式变为:
$$\phi_j=\frac{\sum_{i=1}^m I(z^{(i)}=j)+1}{m+k}$$
即在分母上加上随机变量Z取值范围的大小,在分子加1。注意不是y的取值范围!!
可以发现,\(\sum_{j=1}^k \phi_j=1\)仍然满足。
回到NB算法,我们可以修正各分量的计算公式:
$$\phi_{j|y=1} = \frac{\sum_{i=1}^m I\{x_j^{(i)}=1 \wedge y^{(i)}=1\}+1}{\sum_{i=1}^m I\{y^{(i)}=1\}+2} \\\ \\\ \phi_{j|y=0} = \frac{\sum_{i=1}^m I\{x_j^{(i)}=1 \wedge y^{(i)}=0\}+1}{\sum_{i=1}^m I\{y^{(i)}=0\}+2}$$

  另外,上文我们假设特征项是服从伯努利分布,对应于,词集型模型–根据分类中某词是否出现计算概率,不考虑权重。我们可以假设特征项服从多项式分布,对应于词频型模型–根据分类中某词出现的次数计算概率。这部分是下一个视频的内容,这里我们提前讲下这部分内容。

拓展:朴素贝叶斯多项式事件模型

  前面我们提到的NB模型也被称作多元伯努利事件模型(Multivariate Bernoulli Event Model, 简称NB-MBEM)。这部分将介绍一种与多元伯努利事件模型有较大区别的NB模型,即多项式事件模型(Multinomial Event Model,简称NB-MEM)。
  首先,NB-MEM改变了特征向量的表示方法。在NB-MBEM中,特征向量的每个分量代表词典中该index上的词语是否在文本中出现过,其取值范围为{0,1},特征向量的长度为词典的大小。而在NB-MEM中,特征向量中的每个分量是文本中处于该分量位置的词语在词典中的索引,其取值范围是{1,2,…,|V|},|V|是词典的大小,特征向量的长度为相应样例文本中词语的数目,它会因为样本的不同而不同。
  在NB-MEM中,假设文本的生成过程如下:

  • 随机确定文本的类别,比如是否为垃圾文本、教育类文本、财经类文本。
  • 遍历词典的每个位置,以相同的多项式分布决定是否将该词包含在该文本中。

由上面的生成过程可以知道,NB-MEM假设文本类别服从多项式分布或伯努利分布,即根据p(y)的先验概率分布得到的;而词典中所有的词语则服从多项式分布。生成过程还可以如下解释,即先在类别服从的先验分布p(y)下选取类别,然后遍历整个词典,在词典所服从的多项式分布\(p(x_i=1|y)=\phi_{i|y}\)中选择词语,确定是否放在文本中相应的位置上。因此根据朴素贝叶斯假设,某个文本整体出现的概率是:\(p(y)\prod_{i=1}^n p(x_i|y)\)
  因此,NB-MEM的参数如下所示:
$$\phi_y=p(y) \\\\
\phi_{k|y=1}=p(x_j=k|y=1) \\\\
\phi_{k|y=0}=p(x_j=k|y=0) \\\\
其中,\phi_{k|y=1}可以代表字典中每个词语在类别为1的文本中出现的概率组成的向量
$$
  得到参数在训练集上的极大似然估计:
$$\ell(\phi_y,\phi_{k|y=1},\phi_{k|y=0})=\prod_{i=1}^m p(x^{(i)},y^{(i)})
= \prod_{i=1}^m \left(\prod_{j=1}^{n_i} p(x_j^{(i)}|y);\phi_{k|y=1},\phi_{k|y=0}) \right) p(y^{(i)};\phi_y)
$$
注意上式的\(n_i\)是每个文本的单词量;m是文本数量。
可以根据多项式分布的极大似然估计方法(查查资料),得到各个参数的极大似然估计:
$$
\phi_{k|y=1} = \frac{\sum_{i=1}^m \sum_{j=1}^{n_i} I\{x_j^{(i)}=k \wedge y^{(i)}=1\}}{\sum_{i=1}^m I\{y^{(i)}=1)\}n_i} \\\\
\phi_{k|y=0} = \frac{\sum_{i=1}^m \sum_{j=1}^{n_i} I\{x_j^{(i)}=k \wedge y^{(i)}=0\}}{\sum_{i=1}^m I\{y^{(i)}=0)\}n_i} \\\\
\phi_y = \frac{\sum_{i=1}^m I\{y^{(i)}=1\}}{m}
$$
实际上,\(\phi_{k|y=1}\)分子代表:对所有的m个文本样本进行外层遍历,再对每个文本的\(n_i\)个单词进行内层遍历,如果该文本类别为1,统计该文本中该单词出现的次数,最后将所有文本中该单词出现的次数进行累加作为分子。分母则代表,对所有类别为1的文本,累加其所有的单词量。
使用拉普拉斯平滑得到:
$$
\phi_{k|y=1} = \frac{\sum_{i=1}^m \sum_{j=1}^{n_i} I\{x_j^{(i)}=k \wedge y^{(i)}=1\}+1}{\sum_{i=1}^m I\{y^{(i)}=1)\}n_i+|V|} \\\\
\phi_{k|y=0} = \frac{\sum_{i=1}^m \sum_{j=1}^{n_i} I\{x_j^{(i)}=k \wedge y^{(i)}=0\}+1}{\sum_{i=1}^m I\{y^{(i)}=0)\}n_i+|V|}
$$
其中,|V|为词典的大写,也就是变量\(X\)的每个特征分量的取值范围。

参考

斯坦福大学机器学习视频教程
Naive Bayes Spam detection

坚持原创技术分享,您的支持将鼓励我继续创作!