Generative Learning algorithms

目前为止,我们讲过的学习算法的模型都是4 生成学习算法 - 图1#card=math&code=p%20%28y%7Cx%3B%5Ctheta%29&height=16&width=48),也就是给定 4 生成学习算法 - 图24 生成学习算法 - 图3 的条件分布,以 4 生成学习算法 - 图4 为参数。例如,逻辑回归中就是以 4 生成学习算法 - 图5%20%3D%20g(%5Ctheta%5ET%20x)#card=math&code=h_%5Ctheta%28x%29%20%3D%20g%28%5Ctheta%5ET%20x%29&height=18&width=89) 作为 4 生成学习算法 - 图6#card=math&code=p%20%28y%7Cx%3B%5Ctheta%29&height=16&width=48) 的模型,这里的 4 生成学习算法 - 图7 是一个 4 生成学习算法 - 图8型函数(sigmoid function)。接下来,咱们要讲一下一种不同类型的学习算法。

设想有这样一种分类问题,我们要学习基于一个动物的某个特征来辨别它是大象4 生成学习算法 - 图9#card=math&code=%28y%3D1%29&height=16&width=41)还是小狗4 生成学习算法 - 图10#card=math&code=%28y%3D0%29&height=16&width=41)。给定一个训练集,用逻辑回归或者基础版的感知器算法(perceptron algorithm) 这样的一个算法能找到一条直线,作为区分开大象和小狗的边界。接下来,要辨别一个新的动物是大象还是小狗,程序就要检查这个新动物的值落到了划分出来的哪个区域中,然后根据所落到的区域来给出预测。

还有另外一种方法。首先,观察大象,然后我们针对大象的样子来进行建模。然后,再观察小狗,针对小狗的样子另外建立一个模型。最后要判断一种新动物归属哪一类,我们可以把新动物分别用大象和小狗的模型来进比对,看看新动物更接近哪个训练集中已有的模型。

例如逻辑回归之类的直接试图建立 4 生成学习算法 - 图11#card=math&code=p%28y%7Cx%29&height=16&width=36)的算法,以及感知器算法(perceptron algorithm)等直接用投图(mappings directly)的思路来判断对应 4 生成学习算法 - 图12 的值落到了 4 生成学习算法 - 图13 中哪个区域的算法,这些都叫判别式学习算法(discriminative learning algorithms)。 和之前的这些判别式算法不同,下面我们要讲的新算法是对 4 生成学习算法 - 图14#card=math&code=p%28x%7Cy%29&height=16&width=36) 和 4 生成学习算法 - 图15#card=math&code=p%28y%29&height=16&width=24)来进行建模。这类算法叫做生成学习算法(generative learning algorithms)。例如如果 4 生成学习算法 - 图16 用来表示一个样例是 小狗 4 生成学习算法 - 图17#card=math&code=%280%29&height=16&width=17) 或者 大象 4 生成学习算法 - 图18#card=math&code=%281%29&height=16&width=17),那么4 生成学习算法 - 图19#card=math&code=p%28x%7Cy%20%3D%200%29&height=16&width=61)就是对小狗特征分布的建模,而4 生成学习算法 - 图20#card=math&code=p%28x%7Cy%20%3D%201%29&height=16&width=61)就是对大象特征分布的建模。

4 生成学习算法 - 图21#card=math&code=p%28y%29&height=16&width=24) (通常称为class priors译者注:这里没有找到合适的词进行翻译) 和4 生成学习算法 - 图22#card=math&code=p%28x%7Cy%29&height=16&width=36) 进行建模之后,我们的算法就是用贝叶斯规则(Bayes rule) 来推导对应给定 4 生成学习算法 - 图234 生成学习算法 - 图24后验分布(posterior distribution)

4 生成学习算法 - 图25%3D%5Cfrac%7Bp(x%7Cy)p(y)%7D%7Bp(x)%7D%0A#card=math&code=p%28y%7Cx%29%3D%5Cfrac%7Bp%28x%7Cy%29p%28y%29%7D%7Bp%28x%29%7D%0A&height=37&width=119)

这里的分母(denominator) 为:4 生成学习算法 - 图26%20%3D%20p(x%7Cy%20%3D%201)p(y%20%3D%201)%20%2B%20p(x%7Cy%20%3D%200)p(y%20%3D%200)#card=math&code=p%28x%29%20%3D%20p%28x%7Cy%20%3D%201%29p%28y%20%3D%201%29%20%2B%20p%28x%7Cy%20%3D%200%29p%28y%20%3D%200%29&height=16&width=279)(这个等式关系可以根据概率的标准性质来推导验证译者注:其实就是条件概率),这样接下来就可以把它表示成我们熟悉的 4 生成学习算法 - 图27#card=math&code=p%28x%7Cy%29&height=16&width=36)和 4 生成学习算法 - 图28#card=math&code=p%28y%29&height=16&width=24) 的形式了。实际上如果我们计算4 生成学习算法 - 图29#card=math&code=p%28y%7Cx%29&height=16&width=36) 来进行预测,那就并不需要去计算这个分母,因为有下面的等式关系:

4 生成学习算法 - 图30%20%26%20%3D%5Carg%20%5Cmax_y%20%5Cfrac%7Bp(x%7Cy)p(y)%7D%7Bp(x)%7D%5C%5C%0A%26%3D%20%5Carg%20%5Cmax_y%20p(x%7Cy)p(y)%0A%5Cend%7Baligned%7D#card=math&code=%5Cbegin%7Baligned%7D%0A%5Carg%20%5Cmax_y%20p%28y%7Cx%29%20%26%20%3D%5Carg%20%5Cmax_y%20%5Cfrac%7Bp%28x%7Cy%29p%28y%29%7D%7Bp%28x%29%7D%5C%5C%0A%26%3D%20%5Carg%20%5Cmax_y%20p%28x%7Cy%29p%28y%29%0A%5Cend%7Baligned%7D&height=63&width=219)

4.1 高斯判别分析(Gaussian discriminant analysis)

咱们要学的第一个生成学习算法就是高斯判别分析(Gaussian discriminant analysis ,缩写为GDA。译者注:高斯真棒!)在这个模型里面,我们假设 4 生成学习算法 - 图31#card=math&code=p%28x%7Cy%29&height=16&width=36)是一个多元正态分布。 所以首先咱们简单讲一下多元正态分布的一些特点,然后再继续讲 GDA 高斯判别分析模型。

4.1.1 多元正态分布(multivariate normal distribution)

4 生成学习算法 - 图32维多元正态分布,也叫做多变量高斯分布,参数为一个4 生成学习算法 - 图33均值向量 4 生成学习算法 - 图34,以及一个 协方差矩阵 4 生成学习算法 - 图35,其中4 生成学习算法 - 图36 是一个对称(symmetric)的半正定(positive semi-definite)矩阵。当然也可以写成”4 生成学习算法 - 图37#card=math&code=N%20%28%5Cmu%2C%20%5CSigma%29&height=16&width=46)” 的分布形式,密度(density)函数为:

4 生成学习算法 - 图38%3D%5Cfrac%7B1%7D%7B(2%5Cpi)%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp(-%5Cfrac%7B1%7D%7B2%7D(x-%5Cmu)%5ET%5CSigma%5E%7B-1%7D(x-%5Cmu))%0A#card=math&code=p%28x%3B%5Cmu%2C%5CSigma%29%3D%5Cfrac%7B1%7D%7B%282%5Cpi%29%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp%28-%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu%29%5ET%5CSigma%5E%7B-1%7D%28x-%5Cmu%29%29%0A&height=37&width=325)

在上面的等式中,”4 生成学习算法 - 图39“的意思是矩阵4 生成学习算法 - 图40的行列式(determinant)。对于一个在 4 生成学习算法 - 图41#card=math&code=N%28%5Cmu%2C%5CSigma%29&height=16&width=46)分布中的随机变量 4 生成学习算法 - 图42 ,其平均值(跟正态分布里面差不多,所以并不意外)就是 4 生成学习算法 - 图43 了:

4 生成学习算法 - 图44dx%3D%5Cmu%0A#card=math&code=E%5BX%5D%3D%5Cint_x%20xp%28x%3B%5Cmu%2C%5CSigma%29dx%3D%5Cmu%0A&height=32&width=168)

随机变量4 生成学习算法 - 图45是一个有值的向量(vector-valued random variable),4 生成学习算法 - 图46协方差(covariance) 的定义是:4 生成学习算法 - 图47%20%3D%20E%5B(Z-E%5BZ%5D)(Z-E%5BZ%5D)%5ET%20%5D#card=math&code=Cov%28Z%29%20%3D%20E%5B%28Z-E%5BZ%5D%29%28Z-E%5BZ%5D%29%5ET%20%5D&height=18&width=217)。这是对实数随机变量的方差(variance)这一概念的泛化扩展。这个协方差还可以定义成4 生成学习算法 - 图48%20%3D%20E%5BZZ%5ET%5D-(E%5BZ%5D)(E%5BZ%5D)%5ET#card=math&code=Cov%28Z%29%20%3D%20E%5BZZ%5ET%5D-%28E%5BZ%5D%29%28E%5BZ%5D%29%5ET&height=18&width=209)(你可以自己证明一下这两个定义实际上是等价的。)如果 4 生成学习算法 - 图49 是一个多变量正态分布,即 4 生成学习算法 - 图50#card=math&code=X%20%5Csim%20N%20%28%5Cmu%2C%20%5CSigma%29&height=16&width=76),则有:

4 生成学习算法 - 图51%3D%5CSigma%0A#card=math&code=Cov%28X%29%3D%5CSigma%0A&height=16&width=73)

下面这些样例是一些高斯分布的密度图,如下图所示:

4 生成学习算法 - 图52

最左边的图,展示的是一个均值为4 生成学习算法 - 图53(实际上是一个4 生成学习算法 - 图54 的零向量)的高斯分布,协方差矩阵就是4 生成学习算法 - 图55 (一个 4 生成学习算法 - 图56的单位矩阵,identity matrix)。这种均值为4 生成学习算法 - 图57 并且协方差矩阵为单位矩阵的高斯分布也叫做标准正态分布。 中间的图中展示的是均值为4 生成学习算法 - 图58而协方差矩阵是4 生成学习算法 - 图59 的高斯分布的概率密度函数;最右边的展示的是协方差矩阵4 生成学习算法 - 图60的高斯分布的概率密度函数。从这几个图可以看出,随着协方差矩阵4 生成学习算法 - 图61变大,高斯分布的形态就变得更宽平(spread-out),而如果协方差矩阵4 生成学习算法 - 图62变小,分布就会更加集中(compressed)。

来看一下更多的样例:

4 生成学习算法 - 图63

上面这几个图展示的是均值为4 生成学习算法 - 图64,但协方差矩阵各不相同的高斯分布,其中的协方差矩阵依次如下所示:

4 生成学习算法 - 图65

第一幅图还跟之前的标准正态分布的样子很相似,然后我们发现随着增大协方差矩阵4 生成学习算法 - 图66 的反对角线(off-diagonal)的值,密度图像开始朝着 45° 方向 (也就是 4 生成学习算法 - 图67 所在的方向)逐渐压缩(compressed)。 看一下三个同样分布密度图的轮廓图(contours)能看得更明显:

4 生成学习算法 - 图68

下面的是另外一组样例,调整了协方差矩阵4 生成学习算法 - 图69:

4 生成学习算法 - 图70

上面这三个图像对应的协方差矩阵分别如下所示:

4 生成学习算法 - 图71

从最左边的到中间译者注:注意,左边和中间的这两个协方差矩阵中,右上和左下的元素都是负值!很明显随着协方差矩阵中右上左下这个对角线方向元素的值的降低,图像还是又被压扁了(compressed),只是方向是反方向的。最后,随着我们修改参数,通常生成的轮廓图(contours)都是椭圆(最右边的图就是一个例子)。

再举一些例子,固定协方差矩阵为单位矩阵,即4 生成学习算法 - 图72,然后调整均值4 生成学习算法 - 图73,我们就可以让密度图像随着均值而移动:

4 生成学习算法 - 图74

上面的图像中协方差矩阵都是单位矩阵,即 4 生成学习算法 - 图75,对应的均值4 生成学习算法 - 图76如下所示:

4 生成学习算法 - 图77

4.1.2 高斯判别分析模型(Gaussian Discriminant Analysis model)

假如我们有一个分类问题,其中输入特征 4 生成学习算法 - 图78 是一系列的连续随机变量(continuous-valued random variables),那就可以使用高斯判别分析(Gaussian Discriminant Analysis ,缩写为 GDA)模型,其中对 4 生成学习算法 - 图79#card=math&code=p%28x%7Cy%29&height=16&width=36)用多元正态分布来进行建模。这个模型为:

4 生成学习算法 - 图80%5C%5C%0Ax%7Cy%20%3D%200%20%26%20%5Csim%20N(%5Cmu_o%2C%5CSigma)%5C%5C%0Ax%7Cy%20%3D%201%20%26%20%5Csim%20N(%5Cmu_1%2C%5CSigma)%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Ay%20%26%20%5Csim%20Bernoulli%28%5Cphi%29%5C%5C%0Ax%7Cy%20%3D%200%20%26%20%5Csim%20N%28%5Cmu_o%2C%5CSigma%29%5C%5C%0Ax%7Cy%20%3D%201%20%26%20%5Csim%20N%28%5Cmu_1%2C%5CSigma%29%5C%5C%0A%5Cend%7Baligned%7D%0A&height=53&width=142)

分布写出来的具体形式如下:

4 生成学习算法 - 图81%20%26%20%3D%5Cphi%5Ey%20(1-%5Cphi)%5E%7B1-y%7D%5C%5C%0Ap(x%7Cy%3D0)%20%26%20%3D%20%5Cfrac%7B1%7D%7B(2%5Cpi)%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp%20(%20-%20%5Cfrac%7B1%7D%7B2%7D(x-%5Cmu_0)%5ET%5CSigma%5E%7B-1%7D(x-%5Cmu_0)%20%20)%5C%5C%0Ap(x%7Cy%3D1)%20%26%20%3D%20%5Cfrac%7B1%7D%7B(2%5Cpi)%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp%20(%20-%20%5Cfrac%7B1%7D%7B2%7D(x-%5Cmu_1)%5ET%5CSigma%5E%7B-1%7D(x-%5Cmu_1)%20%20)%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Ap%28y%29%20%26%20%3D%5Cphi%5Ey%20%281-%5Cphi%29%5E%7B1-y%7D%5C%5C%0Ap%28x%7Cy%3D0%29%20%26%20%3D%20%5Cfrac%7B1%7D%7B%282%5Cpi%29%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp%20%28%20-%20%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu_0%29%5ET%5CSigma%5E%7B-1%7D%28x-%5Cmu_0%29%20%20%29%5C%5C%0Ap%28x%7Cy%3D1%29%20%26%20%3D%20%5Cfrac%7B1%7D%7B%282%5Cpi%29%5E%7Bn%2F2%7D%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20exp%20%28%20-%20%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu_1%29%5ET%5CSigma%5E%7B-1%7D%28x-%5Cmu_1%29%20%20%29%5C%5C%0A%5Cend%7Baligned%7D%0A&height=98&width=345)

在上面的等式中,模型的参数包括4 生成学习算法 - 图82。(要注意,虽然这里有两个不同方向的均值向量4 生成学习算法 - 图834 生成学习算法 - 图84,针对这个模型还是一般只是用一个协方差矩阵4 生成学习算法 - 图85。)取对数的似然函数(log-likelihood)如下所示:

4 生成学习算法 - 图86%20%26%3D%20%5Clog%20%5Cprod%5Em%7Bi%3D1%7Dp(x%5E%7B(i)%7D%2Cy%5E%7B(i)%7D%3B%5Cphi%2C%5Cmu_0%2C%5Cmu_1%2C%5CSigma)%5C%5C%0A%26%3D%20%5Clog%20%5Cprod%5Em%7Bi%3D1%7Dp(x%5E%7B(i)%7D%7Cy%5E%7B(i)%7D%3B%5Cmu0%2C%5Cmu_1%2C%5CSigma)p(y%5E%7B(i)%7D%3B%5Cphi)%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Al%28%5Cphi%2C%5Cmu_0%2C%5Cmu_1%2C%5CSigma%29%20%26%3D%20%5Clog%20%5Cprod%5Em%7Bi%3D1%7Dp%28x%5E%7B%28i%29%7D%2Cy%5E%7B%28i%29%7D%3B%5Cphi%2C%5Cmu0%2C%5Cmu_1%2C%5CSigma%29%5C%5C%0A%26%3D%20%5Clog%20%5Cprod%5Em%7Bi%3D1%7Dp%28x%5E%7B%28i%29%7D%7Cy%5E%7B%28i%29%7D%3B%5Cmu_0%2C%5Cmu_1%2C%5CSigma%29p%28y%5E%7B%28i%29%7D%3B%5Cphi%29%5C%5C%0A%5Cend%7Baligned%7D%0A&height=82&width=307)

通过使 4 生成学习算法 - 图87 取得最大值,找到对应的参数组合,然后就能找到该参数组合对应的最大似然估计,如下所示(参考习题集1):

4 生成学习算法 - 图88%7D%3D1%5C%7D%5C%5C%0A%5Cmu0%20%26%20%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7Dx%5E%7B(i)%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7D%7D%5C%5C%0A%5Cmu_1%20%26%20%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D1%5C%7Dx%5E%7B(i)%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D1%5C%7D%7D%5C%5C%0A%5CSigma%20%26%20%3D%20%5Cfrac%7B1%7D%7Bm%7D%5Csum%5Em%7Bi%3D1%7D(x%5E%7B(i)%7D-%5Cmu%7By%5E%7B(i)%7D%7D)(x%5E%7B(i)%7D-%5Cmu%7By%5E%7B(i)%7D%7D)%5ET%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%20%26%20%3D%20%5Cfrac%20%7B1%7D%7Bm%7D%20%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7D%5C%5C%0A%5Cmu_0%20%26%20%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7Dx%5E%7B%28i%29%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7D%7D%5C%5C%0A%5Cmu_1%20%26%20%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7Dx%5E%7B%28i%29%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7D%7D%5C%5C%0A%5CSigma%20%26%20%3D%20%5Cfrac%7B1%7D%7Bm%7D%5Csum%5Em%7Bi%3D1%7D%28x%5E%7B%28i%29%7D-%5Cmu%7By%5E%7B%28i%29%7D%7D%29%28x%5E%7B%28i%29%7D-%5Cmu%7By%5E%7B%28i%29%7D%7D%29%5ET%5C%5C%0A%5Cend%7Baligned%7D%0A&height=166&width=225)

用图形化的方式来表述,这个算法可以按照下面的图示所表示:

4 生成学习算法 - 图89

图中展示的点就是训练数据集,图中的两个高斯分布就是针对两类数据各自进行的拟合。要注意这两个高斯分布的轮廓图有同样的形状和拉伸方向,这是因为他们都有同样的协方差矩阵4 生成学习算法 - 图90,但他们有不同的均值4 生成学习算法 - 图914 生成学习算法 - 图92 。此外,图中的直线给出了4 生成学习算法 - 图93%20%3D%200.5#card=math&code=p%20%28y%20%3D%201%7Cx%29%20%3D%200.5&height=16&width=96) 这条边界线。在这条边界的一侧,我们预测 4 生成学习算法 - 图94是最可能的结果,而另一侧,就预测 4 生成学习算法 - 图95是最可能的结果。

4.1.3 讨论:高斯判别分析(GDA)与逻辑回归(logistic regression)

高斯判别分析模型与逻辑回归有很有趣的相关性。如果我们把变量(quantity)4 生成学习算法 - 图96#card=math&code=p%20%28y%20%3D%201%7Cx%3B%20%5Cphi%2C%20%5Cmu_0%2C%20%5Cmu_1%2C%20%5CSigma%29&height=16&width=131) 作为一个 4 生成学习算法 - 图97 的函数,就会发现可以用如下的形式来表达:

4 生成学习算法 - 图98%3D%5Cfrac%201%20%7B1%2Bexp(-%5Ctheta%5ETx)%7D%0A#card=math&code=p%28y%3D1%7Cx%3B%5Cphi%2C%5CSigma%2C%5Cmu_0%2C%5Cmu_1%29%3D%5Cfrac%201%20%7B1%2Bexp%28-%5Ctheta%5ETx%29%7D%0A&height=35&width=242)

其中的 4 生成学习算法 - 图99 是对4 生成学习算法 - 图100, 4 生成学习算法 - 图101, 4 生成学习算法 - 图102, 4 生成学习算法 - 图103的某种函数。这就是逻辑回归(也是一种判别分析算法)用来对4 生成学习算法 - 图104#card=math&code=p%20%28y%20%3D%201%7Cx%29&height=16&width=61) 建模的形式。

注:上面这里用到了一种转换,就是重新对4 生成学习算法 - 图105%7D#card=math&code=x%5E%7B%28i%29%7D&height=16&width=20)向量进行了定义,在右手侧(right-hand-side)增加了一个额外的坐标4 生成学习算法 - 图106%7D%20%3D%201#card=math&code=x_0%5E%7B%28i%29%7D%20%3D%201&height=21&width=45),然后使之成为了一个 4 生成学习算法 - 图107维的向量;具体内容参考习题集1。

这两个模型中什么时候该选哪一个呢?一般来说,高斯判别分析(GDA)和逻辑回归,对同一个训练集,可能给出的判别曲线是不一样的。哪一个更好些呢?

我们刚刚已经表明,如果4 生成学习算法 - 图108#card=math&code=p%28x%7Cy%29&height=16&width=36)是一个多变量的高斯分布(且具有一个共享的协方差矩阵4 生成学习算法 - 图109),那么4 生成学习算法 - 图110#card=math&code=p%28y%7Cx%29&height=16&width=36)则必然符合一个逻辑函数(logistic function)。然而,反过来,这个命题是不成立的。例如假如4 生成学习算法 - 图111#card=math&code=p%28y%7Cx%29&height=16&width=36)是一个逻辑函数,这并不能保证4 生成学习算法 - 图112#card=math&code=p%28x%7Cy%29&height=16&width=36)一定是一个多变量的高斯分布。这就表明高斯判别模型能比逻辑回归对数据进行更强的建模和假设(stronger modeling assumptions)。 这也就意味着,在这两种模型假设都可用的时候,高斯判别分析法去拟合数据是更好的,是一个更好的模型。 尤其当4 生成学习算法 - 图113#card=math&code=p%28x%7Cy%29&height=16&width=36)已经确定是一个高斯分布(有共享的协方差矩阵4 生成学习算法 - 图114),那么高斯判别分析是渐进有效的(asymptotically efficient)。 实际上,这也意味着,在面对非常大的训练集(训练样本规模 $m $特别大)的时候,严格来说,可能就没有什么别的算法能比高斯判别分析更好(比如考虑到对 4 生成学习算法 - 图115#card=math&code=p%28y%7Cx%29&height=16&width=36)估计的准确度等等)。所以在这种情况下就表明,高斯判别分析(GDA)是一个比逻辑回归更好的算法;再扩展一下,即便对于小规模的训练集,我们最终也会发现高斯判别分析(GDA)是更好的。

奈何事有正反,由于逻辑回归做出的假设要明显更弱一些(significantly weaker),所以因此逻辑回归给出的判断鲁棒性(robust)也更强,同时也对错误的建模假设不那么敏感。有很多不同的假设集合都能够将4 生成学习算法 - 图116#card=math&code=p%28y%7Cx%29&height=16&width=36)引向逻辑回归函数。例如,如果4 生成学习算法 - 图117#card=math&code=x%7Cy%20%3D%200%5Csim%20Poisson%28%5Clambda_0%29&height=16&width=134) 是一个泊松分布,而4 生成学习算法 - 图118#card=math&code=x%7Cy%20%3D%201%5Csim%20Poisson%28%5Clambda_1%29&height=16&width=134)也是一个泊松分布,那么4 生成学习算法 - 图119#card=math&code=p%28y%7Cx%29&height=16&width=36)也将是适合逻辑回归的(logistic)。逻辑回归也适用于这类的泊松分布的数据。但对这样的数据,如果我们强行使用高斯判别分析(GDA),然后用高斯分布来拟合这些非高斯数据,那么结果的可预测性就会降低,而且GDA这种方法也许可行,也有可能是不能用。

总结一下也就是:高斯判别分析方法(GDA)能够建立更强的模型假设,并且在数据利用上更加有效(比如说,需要更少的训练集就能有”还不错的”效果),当然前提是模型假设争取或者至少接近正确。逻辑回归建立的假设更弱,因此对于偏离的模型假设来说更加鲁棒(robust)。然而,如果训练集数据的确是非高斯分布的(non-Gaussian),而且是有限的大规模数据(in the limit of large datasets),那么逻辑回归几乎总是比GDA要更好的。因此,在实际中,逻辑回归的使用频率要比GDA高得多。(关于判别和生成模型的对比的相关讨论也适用于我们下面要讲的朴素贝叶斯算法(Naive Bayes),但朴素贝叶斯算法还是被认为是一个非常优秀也非常流行的分类算法。)

4.2 朴素贝叶斯法(Naive Bayes)

在高斯判别分析(GDA)方法中,特征向量 4 生成学习算法 - 图120 是连续的,值为实数的向量。下面我们要讲的是当 4 生成学习算法 - 图121 是离散值的时候来使用的另外一种学习算法。

下面就来继续看一个之前见过的样例,来尝试建立一个邮件筛选器,使用机器学习的方法。这回咱们要来对邮件信息进行分类,来判断是否为商业广告邮件(就是垃圾邮件),还是非垃圾邮件。在学会了怎么实现之后,我们就可以让邮件阅读器能够自动对垃圾信息进行过滤,或者单独把这些垃圾邮件放进一个单独的文件夹中。对邮件进行分类是一个案例,属于文本分类这一更广泛问题集合。

假设我们有了一个训练集(也就是一堆已经标好了是否为垃圾邮件的邮件)。要构建垃圾邮件分选器,咱们先要开始确定用来描述一封邮件的特征4 生成学习算法 - 图122有哪些。

我们将用一个特征向量来表示一封邮件,这个向量的长度等于字典中单词的个数。如果邮件中包含了字典中的第 4 生成学习算法 - 图123 个单词,那么就令 4 生成学习算法 - 图124;反之则4 生成学习算法 - 图125。例如下面这个向量:

4 生成学习算法 - 图126

就用来表示一个邮件,其中包含了两个单词 “a” 和 “buy”,但没有单词 “aardvark”, “aardwolf” 或者 “zymurgy” 。这个单词集合编码整理成的特征向量也成为词汇表(vocabulary,), 所以特征向量 4 生成学习算法 - 图127 的维度就等于词汇表的长度。

注:实际应用中并不需要遍历整个英语词典来组成所有英语单词的列表,实践中更常用的方法是遍历一下训练集,然后把出现过一次以上的单词才编码成特征向量。这样做除了能够降低模型中单词表的长度之外,还能够降低运算量和空间占用,此外还有一个好处就是能够包含一些你的邮件中出现了而词典中没有的单词,比如本课程的缩写CS229。有时候(比如在作业里面),还要排除一些特别高频率的词汇,比如像冠词the,介词of 和and 等等;这些高频率但是没有具体意义的虚词也叫做stop words,因为很多文档中都要有这些词,用它们也基本不能用来判定一个邮件是否为垃圾邮件。

选好了特征向量了,接下来就是建立一个生成模型(generative model)。所以我们必须对4 生成学习算法 - 图128#card=math&code=p%28x%7Cy%29&height=16&width=36)进行建模。但是,假如我们的单词有五万个词,则特征向量4 生成学习算法 - 图129 (即 4 生成学习算法 - 图130是一个 4 生成学习算法 - 图131 维的向量,其值是4 生成学习算法 - 图132或者4 生成学习算法 - 图133),如果我们要对这样的 4 生成学习算法 - 图134进行多项式分布的建模,那么就可能有4 生成学习算法 - 图135 种可能的输出,然后就要用一个 4 生成学习算法 - 图136#card=math&code=%282%5E%7B50000%7D-1%29&height=18&width=65)维的参数向量。这样参数明显太多了。

要给4 生成学习算法 - 图137#card=math&code=p%28x%7Cy%29&height=16&width=36)建模,先来做一个非常强的假设。我们假设特征向量4 生成学习算法 - 图138 对于给定的 4 生成学习算法 - 图139 是独立的。 这个假设也叫做朴素贝叶斯假设(Naive Bayes ,NB assumption), 基于此假设衍生的算法也就叫做朴素贝叶斯分类器(Naive Bayes classifier)。 例如,如果 4 生成学习算法 - 图140 意味着一个邮件是垃圾邮件;然后其中”buy” 是第4 生成学习算法 - 图141个单词,而 “price”是第4 生成学习算法 - 图142个单词;那么接下来我们就假设,如果我告诉你 4 生成学习算法 - 图143,也就是说某一个特定的邮件是垃圾邮件,那么对于4 生成学习算法 - 图144 (也就是单词 buy 是否出现在邮件里)的了解并不会影响你对4 生成学习算法 - 图145 (单词price出现的位置)的采信值。更正规一点,可以写成 4 生成学习算法 - 图146%20%3D%20p(x%7B2087%7D%7Cy%2C%20x%7B39831%7D)#card=math&code=p%28x%7B2087%7D%7Cy%29%20%3D%20p%28x%7B2087%7D%7Cy%2C%20x%7B39831%7D%29&height=16&width=169)。(要注意这个并不是说![](https://g.yuque.com/gr/latex?x%7B2087%7D#card=math&code=x%7B2087%7D&height=12&width=28) 和 ![](https://g.yuque.com/gr/latex?x%7B39831%7D#card=math&code=x%7B39831%7D&height=12&width=32)这两个特征是独立的,那样就变成了![](https://g.yuque.com/gr/latex?p(x%7B2087%7D)%20%3D%20p(x%7B2087%7D%7Cx%7B39831%7D)#card=math&code=p%28x%7B2087%7D%29%20%3D%20p%28x%7B2087%7D%7Cx_%7B39831%7D%29&height=16&width=146),我们这里是说在给定了 4 生成学习算法 - 图147 的这样一个条件下,二者才是有条件的独立。)

然后我们就得到了等式:

4 生成学习算法 - 图148%20%26%20%3D%20p(x1%7Cy)p(x_2%7Cy%2Cx_1)p(x_3%7Cy%2Cx_1%2Cx_2)%20…%20p(x%7B50000%7D%7Cy%2Cx1%2Cx_2%2C…%2Cx%7B49999%7D)%5C%5C%0A%26%20%3D%20p(x1%7Cy)p(x_2%7Cy)p(x_3%7Cy)%20…%20p(x%7B50000%7D%7Cy)%5C%5C%0A%26%20%3D%20%5Cprod%5En%7Bi%3D1%7Dp(x_i%7Cy)%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Ap%28x_1%2C%20…%2C%20x%7B50000%7D%7Cy%29%20%26%20%3D%20p%28x1%7Cy%29p%28x_2%7Cy%2Cx_1%29p%28x_3%7Cy%2Cx_1%2Cx_2%29%20…%20p%28x%7B50000%7D%7Cy%2Cx1%2Cx_2%2C…%2Cx%7B49999%7D%29%5C%5C%0A%26%20%3D%20p%28x1%7Cy%29p%28x_2%7Cy%29p%28x_3%7Cy%29%20…%20p%28x%7B50000%7D%7Cy%29%5C%5C%0A%26%20%3D%20%5Cprod%5En_%7Bi%3D1%7Dp%28x_i%7Cy%29%5C%5C%0A%5Cend%7Baligned%7D%0A&height=77&width=494)

第一行的等式就是简单地来自概率的基本性质,第二个等式则使用了朴素贝叶斯假设。这里要注意,朴素贝叶斯假设也是一个很强的假设,产生的这个算法可以适用于很多种问题。

我们这个模型的参数为 4 生成学习算法 - 图149%2C%20%5Cphi%7Bi%7Cy%3D0%7D%20%3D%20p%20(x_i%20%3D%201%7Cy%20%3D%200)#card=math&code=%5Cphi%7Bi%7Cy%3D1%7D%20%3D%20p%20%28xi%20%3D%201%7Cy%20%3D%201%29%2C%20%5Cphi%7Bi%7Cy%3D0%7D%20%3D%20p%20%28x_i%20%3D%201%7Cy%20%3D%200%29&height=18&width=287), 而 4 生成学习算法 - 图150#card=math&code=%5Cphi_y%20%3D%20p%20%28y%20%3D%201%29&height=17&width=81)。和以往一样,给定一个训练集4 生成学习算法 - 图151%7D%2Cy%5E%7B(i)%7D)%3B%20i%20%3D%201%2C%20…%2C%20m%5C%7D#card=math&code=%5C%7B%28x%5E%7B%28i%29%7D%2Cy%5E%7B%28i%29%7D%29%3B%20i%20%3D%201%2C%20…%2C%20m%5C%7D&height=19&width=146),就可以写出下面的联合似然函数:

4 生成学习算法 - 图152%3D%5Cprod%5Em%7Bi%3D1%7Dp(x%5E%7B(i)%7D%2Cy%5E%7B(i)%7D)%0A#card=math&code=%5Cmathcal%7BL%7D%28%5Cphi_y%2C%5Cphi%7Bj%7Cy%3D0%7D%2C%5Cphi%7Bj%7Cy%3D1%7D%29%3D%5Cprod%5Em%7Bi%3D1%7Dp%28x%5E%7B%28i%29%7D%2Cy%5E%7B%28i%29%7D%29%0A&height=40&width=212)

找到使联合似然函数取得最大值的对应参数组合 4 生成学习算法 - 图153 就给出了最大似然估计:

4 生成学习算法 - 图154%7D%20%3D1%20%5Cwedge%20y%5E%7B(i)%7D%20%3D1%5C%7D%20%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%20%3D1%5C%7D%7D%20%5C%5C%0A%5Cphi%7Bj%7Cy%3D0%7D%20%26%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bx_j%5E%7B(i)%7D%20%3D1%20%5Cwedge%20y%5E%7B(i)%7D%20%3D0%5C%7D%20%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%20%3D0%5C%7D%7D%20%5C%5C%0A%5Cphi%7By%7D%20%26%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%20%3D1%5C%7D%7D%7Bm%7D%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%7Bj%7Cy%3D1%7D%20%26%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%20%3D1%20%5Cwedge%20y%5E%7B%28i%29%7D%20%3D1%5C%7D%20%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%20%3D1%5C%7D%7D%20%5C%5C%0A%5Cphi%7Bj%7Cy%3D0%7D%20%26%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%20%3D1%20%5Cwedge%20y%5E%7B%28i%29%7D%20%3D0%5C%7D%20%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%20%3D0%5C%7D%7D%20%5C%5C%0A%5Cphi%7By%7D%20%26%3D%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%20%3D1%5C%7D%7D%7Bm%7D%5C%5C%0A%5Cend%7Baligned%7D%0A&height=129&width=218)

在上面的等式中,”4 生成学习算法 - 图155(and)”这个符号的意思是逻辑”和”。这些参数有一个非常自然的解释。例如 4 生成学习算法 - 图156 正是单词 4 生成学习算法 - 图157 出现的邮件中垃圾邮件所占 4 生成学习算法 - 图158#card=math&code=%28y%20%3D%201%29&height=16&width=41) 的比例。

拟合好了全部这些参数之后,要对一个新样本的特征向量 4 生成学习算法 - 图159 进行预测,只要进行如下的简单地计算:

4 生成学习算法 - 图160%26%3D%20%20%5Cfrac%7Bp(x%7Cy%3D1)p(y%3D1)%7D%7Bp(x)%7D%5C%5C%0A%26%3D%20%5Cfrac%7B(%5Cprod%5En%7Bi%3D1%7Dp(x_i%7Cy%3D1))p(y%3D1)%7D%7B(%5Cprod%5En%7Bi%3D1%7Dp(xi%7Cy%3D1))p(y%3D1)%2B%20%20(%5Cprod%5En%7Bi%3D1%7Dp(xi%7Cy%3D0))p(y%3D0)%7D%20%20%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Ap%28y%3D1%7Cx%29%26%3D%20%20%5Cfrac%7Bp%28x%7Cy%3D1%29p%28y%3D1%29%7D%7Bp%28x%29%7D%5C%5C%0A%26%3D%20%5Cfrac%7B%28%5Cprod%5En%7Bi%3D1%7Dp%28xi%7Cy%3D1%29%29p%28y%3D1%29%7D%7B%28%5Cprod%5En%7Bi%3D1%7Dp%28xi%7Cy%3D1%29%29p%28y%3D1%29%2B%20%20%28%5Cprod%5En%7Bi%3D1%7Dp%28x_i%7Cy%3D0%29%29p%28y%3D0%29%7D%20%20%5C%5C%0A%5Cend%7Baligned%7D%0A&height=78&width=417)

然后选择有最高后验概率的概率。

最后我们要注意,刚刚我们对朴素贝叶斯算法的使用中,特征向量 4 生成学习算法 - 图161 都是二值化的,其实特征向量也可以是多个离散值,比如4 生成学习算法 - 图162这样也都是可以的。这时候只需要把对4 生成学习算法 - 图163#card=math&code=p%28x_i%7Cy%29&height=16&width=41) 的建模从伯努利分布改成多项式分布。实际上,即便一些原始的输入值是连续值(比如我们第一个案例中的房屋面积),也可以转换成一个小规模的离散值的集合,然后再使用朴素贝叶斯方法。例如,如果我们用特征向量 4 生成学习算法 - 图164 来表示住房面积,那么就可以按照下面所示的方法来对这一变量进行离散化:

居住面积 4 生成学习算法 - 图165 4 生成学习算法 - 图166 4 生成学习算法 - 图167 4 生成学习算法 - 图168 4 生成学习算法 - 图169
离散值 4 生成学习算法 - 图170 4 生成学习算法 - 图171 4 生成学习算法 - 图172 4 生成学习算法 - 图173 4 生成学习算法 - 图174 4 生成学习算法 - 图175

这样,对于一个面积为 4 生成学习算法 - 图176 平方英尺的房屋,就可以根据上面这个集合中对应的值来把特征向量的这一项的4 生成学习算法 - 图177值设置为4 生成学习算法 - 图178。然后就可以用朴素贝叶斯算法,并且将4 生成学习算法 - 图179#card=math&code=p%28x_i%7Cy%29&height=16&width=41)作为多项式分布来进行建模,就都跟前面讲过的内容一样了。当原生的连续值的属性不太容易用一个多元正态分布来进行建模的时候,将其特征向量离散化然后使用朴素贝叶斯法(NB)来替代高斯判别分析法(GDA),通常能形成一个更好的分类器。

4.2.1 拉普拉斯平滑(Laplace smoothing)

刚刚讲过的朴素贝叶斯算法能够解决很多问题了,但还能对这种方法进行一点小调整来进一步提高效果,尤其是应对文本分类的情况。我们来简要讨论一下一个算法当前状态的一个问题,然后在讲一下如何解决这个问题。

还是考虑垃圾邮件分类的过程,设想你学完了CS229的课程,然后做了很棒的研究项目,之后你决定在4 生成学习算法 - 图1804 生成学习算法 - 图181译者注:作者这讲义一定写得很早把自己的作品投稿到NIPS会议,这个NIPS是机器学习领域的一个顶级会议,递交论文的截止日期一般是六月末到七月初。你通过邮件来对这个会议进行了讨论,然后你也开始收到带有 nips 四个字母的信息。但这个是你第一个NIPS论文,而在此之前,你从来没有接到过任何带有 nips 这个单词的邮件;尤其重要的是,nips 这个单词就从来都没有出现在你的垃圾/正常邮件训练集里面。加入这个 nips 是你字典中的第4 生成学习算法 - 图182个单词那么你的朴素贝叶斯垃圾邮件筛选器就要对参数4 生成学习算法 - 图183 进行最大似然估计,如下所示:

4 生成学习算法 - 图184%7D%7B35000%7D%3D1%20%5Cwedge%20y%5E%7B(i)%7D%3D1%20%20%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7D%7D%20%20%26%3D0%20%5C%5C%0A%5Cphi%7B35000%7Cy%3D0%7D%20%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bx%5E%7B(i)%7D%7B35000%7D%3D1%20%5Cwedge%20y%5E%7B(i)%7D%3D0%20%20%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7D%7D%20%20%26%3D0%20%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%7B35000%7Cy%3D1%7D%20%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bx%5E%7B%28i%29%7D%7B35000%7D%3D1%20%5Cwedge%20y%5E%7B%28i%29%7D%3D1%20%20%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7D%7D%20%20%26%3D0%20%5C%5C%0A%5Cphi%7B35000%7Cy%3D0%7D%20%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bx%5E%7B%28i%29%7D%7B35000%7D%3D1%20%5Cwedge%20y%5E%7B%28i%29%7D%3D0%20%20%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7D%7D%20%20%26%3D0%20%5C%5C%0A%5Cend%7Baligned%7D%0A&height=88&width=299)

也就是说,因为之前程序从来没有在别的垃圾邮件或者正常邮件的训练样本中看到过 nips 这个词,所以它就认为看到这个词出现在这两种邮件中的概率都是4 生成学习算法 - 图185。因此当要决定一个包含 nips 这个单词的邮件是否为垃圾邮件的时候,他就检验这个类的后验概率,然后得到了:

4 生成学习算法 - 图186%20%26%3D%20%5Cfrac%7B%20%5Cprod%5En%7Bi%3D1%7D%20p(x_i%7Cy%3D1)p(y%3D1)%20%7D%20%20%20%7B%5Cprod%5En%7Bi%3D1%7D%20p(xi%7Cy%3D1)p(y%3D1)%20%2B%5Cprod%5En%7Bi%3D1%7D%20p(xi%7Cy%3D1)p(y%3D0)%20%20%20%20%7D%5C%5C%0A%26%3D%20%5Cfrac00%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0Ap%28y%3D1%7Cx%29%20%26%3D%20%5Cfrac%7B%20%5Cprod%5En%7Bi%3D1%7D%20p%28xi%7Cy%3D1%29p%28y%3D1%29%20%7D%20%20%20%7B%5Cprod%5En%7Bi%3D1%7D%20p%28xi%7Cy%3D1%29p%28y%3D1%29%20%2B%5Cprod%5En%7Bi%3D1%7D%20p%28x_i%7Cy%3D1%29p%28y%3D0%29%20%20%20%20%7D%5C%5C%0A%26%3D%20%5Cfrac00%5C%5C%0A%5Cend%7Baligned%7D%0A&height=70&width=396)

这是因为对于” 4 生成学习算法 - 图187#card=math&code=%5Cprod%5En%7Bi%3D1%7D%20p%28x_i%7Cy%29&height=40&width=59)”中包含了![](https://g.yuque.com/gr/latex?p(x%7B35000%7D%7Cy)%20%3D%200#card=math&code=p%28x_%7B35000%7D%7Cy%29%20%3D%200&height=16&width=86)的都加了起来,也就还是4 生成学习算法 - 图188。所以我们的算法得到的就是 4 生成学习算法 - 图189,也就是不知道该做出怎么样的预测了。

然后进一步拓展一下这个问题,统计学上来说,只因为你在自己以前的有限的训练数据集中没见到过一件事,就估计这个事件的概率为零,这明显不是个好主意。假设问题是估计一个多项式随机变量 4 生成学习算法 - 图190 ,其取值范围在4 生成学习算法 - 图191之内。接下来就可以用4 生成学习算法 - 图192#card=math&code=%5Cphi_i%20%3D%20p%20%28z%20%3D%20i%29&height=16&width=77) 来作为多项式参数。给定一个 4 生成学习算法 - 图193 个独立观测4 生成学习算法 - 图194%7D%2C%20…%2C%20z%5E%7B(m)%7D%5C%7D#card=math&code=%5C%7Bz%5E%7B%281%29%7D%2C%20…%2C%20z%5E%7B%28m%29%7D%5C%7D&height=19&width=86) 组成的集合,然后最大似然估计的形式如下:

4 生成学习算法 - 图195%7D%3Dj%5C%7D%7Dm%0A#card=math&code=%5Cphij%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bz%5E%7B%28i%29%7D%3Dj%5C%7D%7Dm%0A&height=35&width=131)

正如咱们之前见到的,如果我们用这些最大似然估计,那么一些4 生成学习算法 - 图196可能最终就是零了,这就是个问题了。要避免这个情况,咱们就可以引入拉普拉斯平滑(Laplace smoothing), 这种方法把上面的估计替换成:

4 生成学习算法 - 图197%7D%3Dj%5C%7D%2B1%7D%7Bm%2Bk%7D%0A#card=math&code=%5Cphij%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bz%5E%7B%28i%29%7D%3Dj%5C%7D%2B1%7D%7Bm%2Bk%7D%0A&height=37&width=155)

这里首先是对分子加4 生成学习算法 - 图198,然后对分母加4 生成学习算法 - 图199,要注意4 生成学习算法 - 图200依然成立(自己检验一下),这是一个必须有的性质,因为4 生成学习算法 - 图201 是对概率的估计,然后所有的概率加到一起必然等于4 生成学习算法 - 图202。另外对于所有的 4 生成学习算法 - 图203 值,都有4 生成学习算法 - 图204,这就解决了刚刚的概率估计为零的问题了。在某些特定的条件下(相当强的假设条件下,arguably quite strong),可以发现拉普拉斯平滑还真能给出对参数4 生成学习算法 - 图205 的最佳估计(optimal estimator)。

回到我们的朴素贝叶斯分选器问题上,使用了拉普拉斯平滑之后,对参数的估计就写成了下面的形式:

4 生成学习算法 - 图206%7D%3D1%5Cwedge%20y%20%5E%7B(i)%7D%3D1%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%7B%5C%7By%5E%7B(i)%7D%3D1%5C%7D%7D%2B2%7D%5C%5C%0A%5Cphi%7Bj%7Cy%3D0%7D%20%26%20%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bx_j%5E%7B(i)%7D%3D1%5Cwedge%20y%20%5E%7B(i)%7D%3D10%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%7B%5C%7By%5E%7B(i)%7D%3D0%5C%7D%7D%2B2%7D%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%7Bj%7Cy%3D1%7D%20%26%20%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3D1%5Cwedge%20y%20%5E%7B%28i%29%7D%3D1%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%7B%5C%7By%5E%7B%28i%29%7D%3D1%5C%7D%7D%2B2%7D%5C%5C%0A%5Cphi%7Bj%7Cy%3D0%7D%20%26%20%3D%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3D1%5Cwedge%20y%20%5E%7B%28i%29%7D%3D10%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%7B%5C%7By%5E%7B%28i%29%7D%3D0%5C%7D%7D%2B2%7D%5C%5C%0A%5Cend%7Baligned%7D%0A&height=92&width=247)

(在实际应用中,通常是否对4 生成学习算法 - 图207 使用拉普拉斯并没有太大影响,因为通常我们会对每个垃圾邮件和非垃圾邮件都有一个合适的划分比例,所以4 生成学习算法 - 图208 会是对4 生成学习算法 - 图209#card=math&code=p%28y%20%3D%201%29&height=16&width=49) 的一个合理估计,无论如何都会与零点有一定距离。)

4.2.2 针对文本分类的事件模型(Event models for text classification)

到这里就要给咱们关于生成学习算法的讨论进行一下收尾了,所以就接着讲一点关于文本分类方面的另一个模型。我们刚已经演示过的朴素贝叶斯方法能够解决很多分类问题了,不过还有另一个相关的算法,在针对文本的分类效果还要更好。

在针对文本进行分类的特定背景下,咱们上面讲的朴素贝叶斯方法使用的是一种叫做多元伯努利事件模型(Multi-Variate Bernoulli event model)。 在这个模型里面,我们假设邮件发送的方式,是随机确定的(根据先验类class priors4 生成学习算法 - 图210#card=math&code=p%28y%29&height=16&width=24)),无论是不是垃圾邮件发送者,他是否给你发下一封邮件都是随机决定的。那么发件人就会遍历词典,决定在邮件中是否包含某个单词 4 生成学习算法 - 图211,各个单词之间互相独立,并且服从概率分布4 生成学习算法 - 图212%3D%5Cphi%7Bi%7Cy%7D#card=math&code=p%28x_i%3D1%7Cy%29%3D%5Cphi%7Bi%7Cy%7D&height=18&width=103)。因此,一条消息的概率为:4 生成学习算法 - 图213%5Cprod%5En%7Bi-1%7Dp(x_i%7Cy)#card=math&code=p%28y%29%5Cprod%5En%7Bi-1%7Dp%28x_i%7Cy%29&height=41&width=86)

然后还有另外一个模型,叫做多项式事件模型(Multinomial event model)。 要描述这个模型,我们需要使用一个不同的记号和特征集来表征各种邮件。设 4 生成学习算法 - 图214 表示单词中的第4 生成学习算法 - 图215个单词。因此,4 生成学习算法 - 图216现在就是一个整数,取值范围为4 生成学习算法 - 图217,这里的4 生成学习算法 - 图218是词汇列表(即字典)的长度。这样一个有 4 生成学习算法 - 图219 个单词的邮件就可以表征为一个长度为 4 生成学习算法 - 图220 的向量4 生成学习算法 - 图221#card=math&code=%28x_1%2Cx_2%2C…%2Cx_n%29&height=16&width=89);这里要注意,不同的邮件内容,4 生成学习算法 - 图222 的取值可以是不同的。例如,如果一个邮件的开头是”A NIPS . . .” ,那么4 生成学习算法 - 图223 (“a” 是词典中的第一个),而4 生成学习算法 - 图224 (这是假设 “nips”是词典中的第35000个)。

在多项式事件模型中,我们假设邮件的生成是通过一个随机过程的,而是否为垃圾邮件是首先决定的(根据4 生成学习算法 - 图225#card=math&code=p%28y%29&height=16&width=24)),这个和之前的模型假设一样。然后邮件的发送者写邮件首先是要生成 从对单词4 生成学习算法 - 图226)#card=math&code=%28p%28x1%7Cy%29%29&height=16&width=52) 的某种多项式分布中生成 4 生成学习算法 - 图227。然后第二步是独立于 4 生成学习算法 - 图228 来生成 4 生成学习算法 - 图229,但也是从相同的多项式分布中来选取,然后是 4 生成学习算法 - 图230,4 生成学习算法 - 图231 等等,以此类推,直到生成了整个邮件中的所有的词。因此,一个邮件的总体概率就是4 生成学习算法 - 图232%5Cprod%5En%7Bi%3D1%7Dp(xi%7Cy)#card=math&code=p%28y%29%5Cprod%5En%7Bi%3D1%7Dp%28x_i%7Cy%29&height=40&width=86)。要注意这个方程看着和我们之前那个多元伯努利事件模型里面的邮件概率很相似,但实际上这里面的意义完全不同了。尤其是这里的4 生成学习算法 - 图233现在是一个多项式分布了,而不是伯努利分布了。

我们新模型的参数还是4 生成学习算法 - 图234#card=math&code=%5Cphiy%20%3D%20p%28y%29&height=17&width=56),这个跟以前一样,然后还有![](https://g.yuque.com/gr/latex?%5Cphi%7Bk%7Cy%3D1%7D%20%3D%20p(xj%20%3Dk%7Cy%3D1)#card=math&code=%5Cphi%7Bk%7Cy%3D1%7D%20%3D%20p%28xj%20%3Dk%7Cy%3D1%29&height=18&width=143) (对任何 4 生成学习算法 - 图235)以及 ![](https://g.yuque.com/gr/latex?%5Cphi%7Bi%7Cy%3D0%7D%20%3Dp(xj%20%3Dk%7Cy%3D0)#card=math&code=%5Cphi%7Bi%7Cy%3D0%7D%20%3Dp%28x_j%20%3Dk%7Cy%3D0%29&height=18&width=141)。要注意这里我们已经假设了对于任何4 生成学习算法 - 图236 的值,4 生成学习算法 - 图237#card=math&code=p%28x_j%7Cy%29&height=17&width=41)这个概率都是相等的,也就是意味着在这个哪个词汇生成的这个分布不依赖这个词在邮件中的位置4 生成学习算法 - 图238

如果给定一个训练集4 生成学习算法 - 图239%7D%2Cy%5E%7B(i)%7D)%3B%20i%20%3D%201%2C%20…%2C%20m%5C%7D#card=math&code=%5C%7B%28x%5E%7B%28i%29%7D%2Cy%5E%7B%28i%29%7D%29%3B%20i%20%3D%201%2C%20…%2C%20m%5C%7D&height=19&width=146),其中 4 生成学习算法 - 图240%7D%20%20%3D%20(%20x%5E%7B(i)%7D%7B1%7D%20%2C%20x%5E%7B(i)%7D%7B2%7D%20%2C…%2C%20x%5E%7B(i)%7D%7Bn_i%7D)#card=math&code=x%5E%7B%28i%29%7D%20%20%3D%20%28%20x%5E%7B%28i%29%7D%7B1%7D%20%2C%20x%5E%7B%28i%29%7D%7B2%7D%20%2C…%2C%20x%5E%7B%28i%29%7D%7Bn_i%7D%29&height=21&width=144)(这里的4 生成学习算法 - 图241是在第4 生成学习算法 - 图242个训练样本中的单词数目),那么这个数据的似然函数如下所示:

4 生成学习算法 - 图243%26%20%3D%20%5Cprod%5Em%7Bi%3D1%7Dp(%20x%5E%7B(i)%7D%2Cy%5E%7B(i)%7D)%5C%5C%0A%26%20%3D%20%5Cprod%5Em%7Bi%3D1%7D(%5Cprod%5E%7Bni%7D%7Bj%3D1%7Dp(xj%5E%7B(i)%7D%7Cy%3B%5Cphi%7Bk%7Cy%3D0%7D%2C%5Cphi%7Bk%7Cy%3D1%7D))p(%20y%5E%7B(i)%7D%3B%5Cphi_y)%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cmathcal%7BL%7D%28%5Cphi%2C%5Cphi%7Bk%7Cy%3D0%7D%2C%5Cphi%7Bk%7Cy%3D1%7D%29%26%20%3D%20%5Cprod%5Em%7Bi%3D1%7Dp%28%20x%5E%7B%28i%29%7D%2Cy%5E%7B%28i%29%7D%29%5C%5C%0A%26%20%3D%20%5Cprod%5Em%7Bi%3D1%7D%28%5Cprod%5E%7Bn_i%7D%7Bj%3D1%7Dp%28xj%5E%7B%28i%29%7D%7Cy%3B%5Cphi%7Bk%7Cy%3D0%7D%2C%5Cphi_%7Bk%7Cy%3D1%7D%29%29p%28%20y%5E%7B%28i%29%7D%3B%5Cphi_y%29%5C%5C%0A%5Cend%7Baligned%7D%0A&height=84&width=362)

让上面的这个函数最大化就可以产生对参数的最大似然估计:

4 生成学习算法 - 图244%7D%3Dk%5Cwedge%20y%5E%7B(i)%7D%3D1%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D1%5C%7Dn_i%7D%20%5C%5C%0A%5Cphi%7Bk%7Cy%3D0%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bn_i%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B(i)%7D%3Dk%5Cwedge%20y%5E%7B(i)%7D%3D0%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7Dni%7D%20%5C%5C%0A%5Cphi_y%26%3D%20%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D1%5C%7D%7D%7Bm%7D%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%7Bk%7Cy%3D1%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bni%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3Dk%5Cwedge%20y%5E%7B%28i%29%7D%3D1%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7Dni%7D%20%5C%5C%0A%5Cphi%7Bk%7Cy%3D0%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bn_i%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3Dk%5Cwedge%20y%5E%7B%28i%29%7D%3D0%5C%7D%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7Dni%7D%20%5C%5C%0A%5Cphi_y%26%3D%20%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7D%7D%7Bm%7D%5C%5C%0A%5Cend%7Baligned%7D%0A&height=129&width=253)

如果使用拉普拉斯平滑(实践中会用这个方法来提高性能)来估计4 生成学习算法 - 图2454 生成学习算法 - 图246,就在分子上加1,然后分母上加4 生成学习算法 - 图247,就得到了下面的等式:

4 生成学习算法 - 图248%7D%3Dk%5Cwedge%20y%5E%7B(i)%7D%3D1%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D1%5C%7Dn_i%2B%7CV%7C%7D%20%5C%5C%0A%5Cphi%7Bk%7Cy%3D0%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bn_i%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B(i)%7D%3Dk%5Cwedge%20y%5E%7B(i)%7D%3D0%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B(i)%7D%3D0%5C%7Dni%2B%7CV%7C%7D%20%5C%5C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Cphi%7Bk%7Cy%3D1%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bn_i%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3Dk%5Cwedge%20y%5E%7B%28i%29%7D%3D1%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D1%5C%7Dni%2B%7CV%7C%7D%20%5C%5C%0A%5Cphi%7Bk%7Cy%3D0%7D%26%3D%20%20%5Cfrac%7B%5Csum%5Em%7Bi%3D1%7D%5Csum%5E%7Bn_i%7D%7Bj%3D1%7D1%5C%7Bxj%5E%7B%28i%29%7D%3Dk%5Cwedge%20y%5E%7B%28i%29%7D%3D0%5C%7D%2B1%7D%7B%5Csum%5Em%7Bi%3D1%7D1%5C%7By%5E%7B%28i%29%7D%3D0%5C%7Dn_i%2B%7CV%7C%7D%20%5C%5C%0A%5Cend%7Baligned%7D%0A&height=92&width=276)

当然了,这个并不见得就是一个最好的分类算法,不过朴素贝叶斯分选器通常用起来还都出乎意料地那么好。所以这个方法就是一个很好的”首发选择”,因为它很简单又很好实现。