机器学习笔记5: 朴素贝叶斯算法

朴素贝叶斯模型

在上节介绍的GDA方法中,输入特征x是连续型随机变量。现在我们介绍一个算法用于处理x是离散值的情况。

我们以邮件分类为例来介绍这个算法,邮件分类问题是文本分类(text classification)问题的一个子集。这里我们只考虑把邮件分为两类:垃圾邮件(spam email)和非垃圾邮件(non-spam email)。

我们把邮件中所有出现的单词的集合称为词汇表(vocabulary)。首先我们构造特征向量xi,xi的长度等于词汇表里单词的个数。如果词汇表中第i个单词出现在某封邮件中,那么xi=1,否则xi=0,比如:

上图表明这封邮件里包含a和buy这两个单词,但不包含aardvark,aardwolf,zygmurgy这三个单词。

构建完特征向量后,我们需要对p(x|y)进行建模。假设词汇表里有50000个单词,那么x是50000维的向量且每个元素在0和1内取值,这样可能的结果就有250000种,如果用多项式分布建模的话,就会有250000 - 1个参数,这显然是个天文数字。

为了简化问题,我们就需要做一些假设。我们假设给定y的情况下,xi之间是条件独立的,这个假设称为朴素贝叶斯假设(Naive Bayes assumption)。举例来说,如果y=1表示垃圾邮件,buy是第2087个单词,price是第39831个单词,那么在已知该邮件是垃圾邮件的情况下,“buy出现在该邮件中”和“price出现在该邮件中”这两件事是互不相关的。用形式化的方法表述就是,p(x2087|y)=p(x2087|y, x39831)。注意,我们不是说x2087和x39831是互相独立的,而是说在给定y的情况下x2087和x39831是条件独立的。

因此我们可以作如下推导:

其中第一个等号基于条件概率链式法则,第二个等号基于朴素贝叶斯假设。需要说明的是,尽管朴素贝叶斯假设是个比较强的假设,但在实际问题中表现的效果很好。

我们的模型由φi|y=1 = p(xi=1|y=1),φi|y=0 = p(xi=1|y=0)和φy = p(y=1)这三个参数决定,其似然函数为

通过最大化似然函数,可以求得:

上式中的∧表示逻辑上的(and)。这个公式可以从直观上进行解释,比如φi|y=1就是第j个单词出现在垃圾邮件中的次数除以垃圾邮件的总个数。

所有参数确定后,对一个新特征x作预测,我们可以计算出:

根据p(y=1|x)是否大于0.5来判断新邮件是否是垃圾邮件。

最后,尽管上面我们的x取值只是0或1,但实际上可以把它扩展到多个离散值的情况。另外即使x是连续取值的,我们可以通过离散化(discretize),即按一定的区间将连续值映射到离散值,然后应用朴素贝叶斯算法。

比如对于房价预测问题,我们可以按照上表把住房面积按一定区间离散化,如果住房面积是890,那么对应的特征值xi就是3。一般来说,如果连续型随机变量不能用多元正态分布建模(不能使用GDA),那么将其离散化并采用朴素贝叶斯建模是一个更好的算法。

拉普拉斯平滑处理

朴素贝叶斯算法对大多数问题都有很好的表现,但是我们还需要对其作一些修正使得它在文本分类问题中表现地更出色。

假设NIPS是词汇表里的第35000个单词,但是这个单词从未在训练数据中出现过,因此:

所以预测一个包含单词NIPS的邮件是否为垃圾邮件,我们计算得到:

这是由于每一项乘积里都有p(x35000|y) = 0,因此分子分母都为0,这使得我们无法进行计算。

这个问题从广义上来讲就是,仅仅因为一个事件没有在训练集中出现就预测它的概率为0不是一个好主意。对于φi = p(z=i),之前根据最大似然估计的结果为:

为了避免某些φj等于0,我们可以使用拉普拉斯平滑处理(Laplace smoothing),修正参数如下:

我们在原参数基础上,分子上加了1,分母上加了k。注意修正之后,所有
φj之和仍然为1(j从1到k取值)。并且所有的φj都不为0,解决了之前的问题。

将拉普拉斯平滑处理代入到朴素贝叶斯算法,我们得到修正后的参数:

文本分类的事件模型

朴素贝叶斯算法在很多文本分类问题中都表现地不错,但还有个与之相关的算法表现地更出色。

在文本分类的特定领域,朴素贝叶斯算法使用的是多元伯努利事件模型(multi-variate Bernoulli event model)。在该模型中,我们假设下一封邮件的发送方是随机的发送者(可能是垃圾邮件制造者或者是正常发件人),然后发送方遍历整个字典,然后决定是否将单词i写到邮件中,每个单词i写入的概率p(xi=1|y) = φi|y互相独立。因此,这封邮件出现的概率为:

我们再介绍另一个模型,称之为多项式事件模型(multinomial event model)。这个模型引入了一套不同的符号和特征,xi表示邮件里第i个单词的在字典中的位置,xi在1到|V|中取值,|V|是词汇表(字典)的大小。一封由n个单词组成的邮件由长度为n的向量表示(x1, x2, ..., xn)。比如,某封邮件的开头为"A NIPS ...",那么x1=1(a是字典里第1个单词),x2=35000(NIPS是字典里第35000个单词)。

在多项式事件模型中,我们仍随机选择发送者(和多元伯努利事件模型一样,概率是p(y)),然后发送者根据多项式分布决定第一个单词x1出来(概率是p(x1|y)),再以同样的方式决定后续的单词x2, ..., xn,直到选出n个单词构成这封邮件。因此,在该模型下邮件出现的概率为:

注意这个公式和在多元伯努利事件模型下推导出来的公式非常类似,但实际上这里的每一项都表示不同的含义,尤其是xi|y现在服从多项式分布,而不是伯努利分布。

该模型的参数和之前一样,它们是 φk|y=1 = p(xj=k|y=1),φk|y=0 = p(xj=k|y=0)和φy = p(y)。注意对于任意的j,p(xj|y)的值都是一样的,也就是说单词在邮件中出现的位置与概率无关。

给定训练数据集(x(i), y(i)),其似然函数为:

通过最大化似然函数,可以求得:

应用拉普拉斯平滑,我们在分子上加1,在分母上加|V|,修正后的参数为:

尽管朴素贝叶斯算法不是最好的分类算法,但它的效果却是惊人地好。由于它的简单和易于实现的特性,我们通常把它作为首选试验的算法。

总结

  • 在分类问题中常用的分类算法是朴素贝叶斯算法,模型需要满足朴素贝叶斯假设,即给定y的情况下,xi之间是条件独立的
  • 如果x是连续型随机变量,可以通过离散化后应用朴素贝叶斯算法;对于某些不能使用GDA建模的模型,该方法是一个更好的算法
  • 为了解决朴素贝叶斯算法中某些参数为0导致预测失效,可以采用拉普拉斯平滑对参数修正
  • 文本分类的两种事件模型:多元伯努利事件模型和多项式事件模型,后者通常效果更好

参考资料

  • 斯坦福大学机器学习课CS229讲义 pdf
  • 网易公开课:机器学习课程 双语字幕视频
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容