课程视频地址:http://open.163.com/special/opencourse/machinelearning.html

课程主页:http://cs229.stanford.edu/

更具体的资料链接:https://www.jianshu.com/p/0a6ef31ff77a

笔记参考自中文翻译版:https://github.com/Kivy-CN/Stanford-CS-229-CN

这一讲介绍了高斯判别分析以及朴素贝叶斯算法。

Part IV 生成学习算法

到目前为止,我们主要讨论了模拟$p(y | x;θ)$的学习算法,即给定$x$的$y$的条件分布。 例如,logistic回归将$p(y | x;θ)$建模为$h_{\theta}(x)= g(θ^Tx)$,其中$g$是sigmoid函数。 在这部分讲义中,我们将讨论一种不同类型的学习算法。

​ 考虑一个分类问题,我们希望根据动物的某些特征来学习区分大象$(y=1)$和狗$y=0​$。 给定训练集,像logistic回归或感知机算法的算法试图找到一条直线,即决定边界,然后将大象和狗分开。 然后,为了将新动物分类为大象或狗,它检查决定新动物落在边界的哪一侧,并相应地进行预测。

​ 这里有个不同的方法。 首先,观察大象,我们可以建立一个大象的模型。 然后,观察狗,我们可以建立一个狗的模型。 最后,为了对新动物进行分类,我们可以将新动物与大象模型相匹配,并将其与狗模型相匹配,以查看新动物是否更像我们在训练集中看到的大象或狗。

​ 尝试直接学习$p(y | x)$的算法(例如logistic回归),或者试图直接从输入$\mathcal X$的空间到标签$\{0,1\}$学习映射的算法(例如感知机算法)被称为判别学习算法。在这里,我们将讨论尝试对$p(x | y)$(和$p(y)$)建模的算法。这些算法被称为生成学习算法。例如,如果$y$表示的样本是狗$(0)$还是大象$(1)$,则$p(x | y = 0)$对狗的特征的分布建模,以及$p(x | y = 1)$对大象特征的分布建模。

​ 在对$p(y)​$(称为分类先验)和$p(x|y)​$进行建模之后,我们的算法可以使用贝叶斯法则在给定$x​$的$y​$上导出后验分布:

这里,分母由$p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0)​$给出,因此也可以用我们学到的量$p(x | y)​$和$p(y)​$表示。实际上,如果为了进行预测而计算$p(y|x)​$,那么我们实际上并不需要计算分母,因为

1.高斯判别分析

我们将要看的第一个生成学习算法是高斯判别分析(GDA)。 在这个模型中,我们假设$p(x|y)​$是服从多元正态分布分布。 在进入GDA模型本身之前,让我们简单地谈谈多元正态分布的性质。

1.1 多元正态分布

$n$维的多元正态分布,也称为多元高斯分布,由均值向量$\mu\in \mathbb R^n$以及协方差矩阵$\Sigma \in \mathbb R^{n\times n}$参数化,其中$\Sigma\ge 0$是半正定对称矩阵的。多元正态分布也写为“$\mathcal N(\mu, \Sigma)$”,其密度由下式给出:

在上面的等式中,“$|\Sigma|​$”表示矩阵$\Sigma​$的行列式。

​ 对于服从$\mathcal N(\mu, \Sigma)$的随机变量$X$,期望由$\mu$给出:

​ 向量值随机变量$Z$的协方差定义为$\text{Cov}(Z) =\mathbb E[(Z −\mathbb E[Z])(Z −\mathbb E[Z])^T ]$。 这概括了实值随机变量方差的概念。 协方差也可以定义为$\text{Cov}(Z) =\mathbb E[ZZ^T] −(\mathbb E[Z])(\mathbb E[Z])^T $。如果$X\sim \mathcal N(\mu,\Sigma)$,那么

1.2 高斯判别分析模型

当我们有一个输入特征$x​$是连续随机变量的分类问题时,我们可以使用高斯判别分析(GDA)模型,该模型使用多元正态分布对$p(x|y)​$进行建模。 该模型是:

写出分布,即为:

这里,我们的模型的参数是$\phi,\Sigma,\mu_0,\mu_1$。(注意,虽然存在两个不同的均值向量$\mu_0$和$\mu_1$,但是该模型通常仅使用同一个协方差矩阵$\Sigma $。)数据的对数似然性由下式给出:

通过关于参数最大化$ℓ$,我们发现参数的最大似然估计为:

推导过程如下:

先观察$P(x|y)​$的形式,可以得到如下公式

接着计算$\text{log}P(x,y)$

对数似然函数为

关于$\phi$求梯度

关于$\mu_1,\mu_{0}$求梯度

求$\Sigma​$的时候利用一些技巧性,我们不求的$\Sigma​$极大似然估计,而是求$\Sigma^{-1}​$的极大似然估计,然后再求出$\Sigma ​$的极大似然估计,利用如下两个式子

那么

所以结论成立。

​ 从图中可以看出,算法的作用如下:

​ 图中显示的是训练集,以及两个高斯分布的等高线,这两个高斯分布已经拟合了两个类中的每个类中的数据。 注意,两个高斯具有相同形状和方向的等高线,因为它们共享协方差矩阵,但是它们具有不同的均值$\mu_0 $和$\mu_1$。 图中还示出了给出决策边界的直线,即$p(y = 1|x) = 0.5.$。 在边界的一侧,我们预测$y = 1$是最可能的结果,而另一侧,我们预测$y = 0​$。

1.3 讨论:GDA和logistic回归

GDA模型与logistic回归有着有趣的关系。 如果我们将$p(y = 1|x; φ, μ_0, μ_1,\Sigma)$视为$x$的函数,我们发现它可以表达为如下形式

其中θ是$\phi,\Sigma, \mu_0, \mu_1$的函数。这正是logistic回归——一个判别算法——对模型$p(y=1|x)$建模的形式。

证明如下:

先计算$P(x)$

利用贝叶斯公式计算$P(y|x)$,分$y=1,y=0$计算

所以

现在计算指数部分的式子

所以

从而

​ 在什么时候我们会更喜欢一种模型呢? 一般而言,GDA和logistic回归在对同一数据集进行训练时会给出不同的决策边界。哪个更好?

​ 我们之前讨论了如果$p(x|y)$是多元高斯分布(有共同的$\Sigma$),那么$p(y|x )$必然遵循logistic函数。 然而,相反的情况并非如此;即,$p(y|x )$是logistic函数并不意味着$p(x|y)$是多元高斯分布。这表明GDA比logistic回归对数据做出更强的建模假设。事实证明,当这些建模假设正确时,GDA对数据的拟合更好,是更好的模型。具体来说,当$p(x|y)$确实是高斯分布(有共同的$\Sigma$)时,则GDA渐近有效。 非正式地,这意味着在非常大的训练集(大$m$)的限制下,没有严格优于GDA的算法(就他们估计$p(y|x )​$的准确程度而言)。特别是,可以证明,在这种情况下,GDA将是一种比logistic回归更好的算法;更一般地说,即使是小型训练集,我们通常也会期望GDA更好。

​ 相反,通过做出明显较弱的假设,logistic回归则更加稳健,对不正确的建模假设也不那么敏感。有许多不同的假设会导致$p(y|x )​$采用logistic函数的形式。 例如,如果$x|y = 0 \sim \text{Poisson}(λ_0)​$,并且$x|y = 1 \sim \text{Poisson}(λ_1)​$,那么$p(y|x )​$将是logistic。 Logistic回归也可以很好地处理像这样的泊松数据。 但是如果我们在这样的数据上使用GDA并且将高斯分布拟合到这样的非高斯数据——那么结果将是不太可预测的,并且GDA可能(或可能不)表现良好。

​ 总而言之:当建模假设正确或至少近似正确时,GDA做出更强的建模假设,并且数据效率更高(即,需要更少的训练数据来完成“好”的学习)。 Logistic回归假设较弱,并且对建模假设的偏差明显更加稳健。 具体来说,当数据确实是非高斯数据时,那么在大数据集的限制下,logistic回归几乎总是比GDA更好。 因此,在实际中,logistic回归比GDA更常用。(关于判别模型与生成模型的一些相关考虑也适用于我们接下来讨论的朴素贝叶斯算法,但朴素贝叶斯算法仍然被认为是非常好的,并且当然也是一种非常流行的分类算法。)

2.朴素贝叶斯

在GDA中,特征向量$x$是连续的实值向量。 现在让我们讨论一种不同的学习算法,其中$x_i$是离散值的。

​ 作为我们的示例,请考虑使用机器学习构建垃圾邮件过滤器。 在这里,我们希望根据消息是垃圾邮件还是非垃圾邮件来对邮件进行分类。 在学会这样做之后,我们可以让我们的邮件阅读器自动过滤出垃圾邮件,并可能将它们放在一个单独的邮件文件夹中。 对电子邮件进行分类是称为文本分类的更广泛问题的一个示例。

​ 假设我们有一个训练集(一组标记为垃圾邮件或非垃圾邮件的电子邮件)。我们将通过指定用于表示电子邮件的特征$x_i$来开始构建我们的垃圾邮件过滤器。

​ 我们将通过特征向量表示电子邮件,其长度等于字典中的单词数。 具体来说,如果电子邮件包含字典的第$i$个单词,那么我们将令$x_i = 1$; 否则,我们令$x_i = 0$。例如,向量

用于表示包含单词“a”和“buy”,但不包含“aardvark”,“aardwolf”或“zygmurgy”的电子邮件。编码到特征向量中的单词集称为词汇表,因此$x$的维度等于词汇量的大小。

​ 为了对$p(x|y)$建模,我们将做出一个非常强的假设。 我们假设$x_i$关于$y$是条件独立的。 该假设被称为朴素贝叶斯(NB)假设,并且所得算法被称为朴素贝叶斯分类器。 例如,如果$y = 1$表示垃圾邮件;“buy”是第2087个单词,“price”是第39831个单词;然后假设已知$y=1$(某个特定的电子邮件是垃圾邮件),那么$x_{2087}$的信息(消息中是否出现“buy”的信息)将不会影响到$x_{39831}$的值(是否出现“price”)。更正式地说,这可以写成$p(x_{2087}|y) = p(x_{2087}|y, x_{39831})$。(注意,这与$x_{2087}$和$x_{39831}$是独立的不一样,这个条件为“$p(x_{2087}) = p(x_{2087}| x_{39831})$”;相反,我们只假设$x_{2087}$和$x_{39831}$关于$y$条件独立。)

​ 我们现在有:

第一个等式简单地遵循概率的通常属性,第二个等式使用NB假设。 我们注意到,即使朴素贝叶斯假设是一个非常强的假设,所得到的算法在许多问题上也能很好地工作。

​ 我们的模型通过$\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)$来参数化。 像往常一样,给定训练集$\{(x^{(i)}, y^{(i)}); i =1, . . . ,m\}$,数据的似然性为:

关于$\phi_y, \phi_{j|y=0}, \phi_{j|y=1}$最大化上式给出最大似然估计:

证明如下:

不难看出

令$\varphi $表示参数集$\{\phi_y, \phi_{j|y=0}, \phi_{j|y=1}, j = 1, . . . , n\}$,所以对数似然函数$ℓ(\varphi)​$为

先关于$\phi_{j|y=k}​$求梯度

令上式为$0​$可得

从而

关于$\phi_{y}$求梯度可得

令上式为$0$可得

在上面的等式中,“$∧$”符号表示“and”。这些参数具有非常自然的解释。 例如,$\phi_{j|y=1} $是单词$j$出现的垃圾邮件$(y=1 )$的比例。

​ 在拟合了所有这些参数之后,为了对具有特征$x$的新样本进行预测,我们就可以简单地进行计算

并选择具有较高后验概率的类别。

​ 最后,我们注意到虽然我们已经开发了朴素贝叶斯算法,主要是针对特征$x_i ​$是二值的问题,将其推广到$x_i ​$可以取$\{1, 2, . . . , k_i\}​$很简单。 在这里,我们只是将$p(x_i|y)​$建模为多项分布而不是伯努利分布。 实际上,即使某些原始输入属性(例如,房屋的生活区域,如我们之前的示例中)是连续值,将其离散化也是很常见的,即将其转换为一小组离散值,然后应用朴素贝叶斯。 例如,如果我们使用某些特征$x_i​$来表示生活区域,我们可以将连续值离散化如下:

因此,对于居住面积为$890$平方英尺的房屋,我们将相应特征$x_i$的值设置为$3$,然后我们可以应用朴素贝叶斯算法,并使用多项分布对$p(x_i|y)​$建模,如前所述。当原始的连续值属性没有通过多元正态分布很好地建模时,对特征进行离散化并使用朴素贝叶斯(而不是GDA)通常会产生更好的分类器。

2.1 拉普拉斯平滑

我们已经描述过的朴素贝叶斯算法可以很好地解决许多问题,但是有一个简单的改变可以使它更好地工作,特别是对于文本分类。 让我们简要讨论当前形式的算法问题,然后讨论我们如何解决它。

​ 考虑垃圾邮件/电子邮件分类,让我们假设,在完成CS229并完成项目的优秀工作后,您决定在2003年6月左右将您所做的工作提交给NIPS会议进行发布。(NIPS是顶级机器学习会议之一,提交论文的截止日期通常是在6月底或7月初。)因为您最终在电子邮件中讨论会议,所以您也开始收到带有“nips”字样的消息。 但这是你的第一篇NIPS论文,直到这个时候,你还没有看到任何包含“nips”这个词的电子邮件;特别是“nips”并没有出现在你的垃圾邮件/非垃圾邮件的训练集中。假设“nips”是字典中的第$35000$个单词,那么你的朴素贝叶斯垃圾邮件过滤器已经选择了参数$\phi_{35000|y}$的最大似然估计值:

即,因为它之前从未在垃圾邮件或非垃圾邮件训练样本中看到过“nips”,它认为在任一类型的电子邮件中看到它的概率为零。因此,当试图确定这些包含“nips”的消息之一是否是垃圾邮件时,它会计算后验概率,并得到

这是因为“$\prod_{i=1}^n p(x_i|y)$”中的每一项都包含$p(x_{35000}|y) =0$。 因此,我们的算法获得$0/0$,并且不知道如何进行预测。

​ 更广泛的,仅仅因为你之前没有在有限训练集中看到它,估计一些事件的概率为零在统计上是个坏主意。考虑估计取值$\{1, . . . , k\}$的多项分布随机变量$z$的均值的问题。 我们可以用$\phi_i =p(z=i)$参数化我们的多项式。 给定一组$m$个独立观测变量$\{z^{(1)}, . . . , z^{(m)}\}​$,最大似然估计由下式给出

正如我们之前看到的,如果我们使用这些最大似然估计,那么一些$\phi_j$可能最终为零,这就会产生问题。为了避免这种情况,我们可以使用拉普拉斯平滑,它取代上面的估计

这里,我们对分子加$1$,对分母加$k$。 注意$\sum_{j=1}^k \phi_j=1$仍然成立。对于所有$j$,$\phi_j \neq 0$。 在某些(可以说是相当强的)条件下,可以证明拉普拉斯平滑实际上给出了$\phi_j$的最优估计。

​ 返回我们的朴素贝叶斯分类器,使用拉普拉斯平滑,我们因此得到以下参数估计: