生成学习算法之朴素贝叶斯算法

来源:互联网 发布:中韩农产品贸易数据 编辑:程序博客网 时间:2024/06/05 16:03

本文接着上一篇生成学习算法之高斯判别分析模型,来继续讲述生成学习算法。

2  朴素贝叶斯算法

在GDA中,特征向量是连续的实值向量。现在让我们讨论一种不同的学习算法,在这个算法中,是离散值。
对于我们的激励的例子,考虑使用机器学习建立一个电子邮件的垃圾邮件过滤器。这里,我们希望根据它们是未经请求的商业(垃圾)电子邮件还是非垃圾邮件进行分类。在学习了这样做之后,我们然后可以让我们的邮件阅读器自动过滤掉垃圾信息,并可能将它们放置在一个单独的邮件文件夹中。电子邮件的分类是一个更广泛的被称作文本分类(text classification)问题的一个例子。
比如说我们有一个训练集(一组被标记为垃圾邮件或非垃圾邮件的电子邮件)。通过指定用来表示电子邮件的特征,我们将开始创建我们的垃圾邮件过滤器。
我们将通过一个特征向量表示一封电子邮件,特征向量的长度为词典中单词的数量。确切地说,如果一封电子邮件包括词典中的第个单词,然后我们令;否则我们令
比如说,向量


用来表示一封包含单词”a”和”buy”,但不包括”aardvark”,”aardworf”和”zygmurgy”的电子邮件。被编码到特征向量的那组单词被称作词汇(vocabulary),所以的维数等于词汇表的大小。
已经选择好了我们的特征向量,我们现在想建立一个判别模型。所以,我们必须建模。但是如果我们有,比如,50000个单词的词汇表,然后是一个50000维的0和1的向量),并且如果我们想用一个有个可能结果的多项式分布对建模,然后我们最终会得到维的参数向量。这明显有太多的参数。
为了建模,因此我们将做一个非常强的假设。我们将假设在给定时是条件独立的。这个假设被称作朴素贝叶斯假设(Naive Bayes(NB)assumption),由此产生的算法被称作朴素贝叶斯分类器(Naive Bayes classifier)。比如,如果意味着垃圾邮件;”buy”是第2087个单词,”price”是第39831个单词;然后我们正在假设的是,如果我告诉你(即一条特定的电子邮件是垃圾邮件),那么的(是否”buy”出现在消息中)知识将不会对你对的值(是否”price”出现)的看法有影响。更正式地,这可以写作。(注意这与是独立的说法是不同的,独立将被写作;相反地,我们只假设在给定时是条件独立的。)
我们现在有:


第一个等式仅是由常见的概率性质推导出来的,第二个等式使用了NB假设。我们要指出的是即使朴素贝叶斯假设是非常强的假设,但由此产生的算法在很多问题上都表现的不错。
我们的模型由参数化。像往常一样,给定一个训练集,我们可以写出数据的联合似然:


关于最大化得到最大似然估计:


在上面的等式中,符号“”意思是“并”。参数有一个非常自然的解释。比如,正好是单词出现的垃圾邮件占垃圾电子邮件()的分数。
拟合好了所有这些参数,为了对一个具有特征的新样例做出预测,我们然后仅仅计算
 
然后选择具有较高后验概率的类。
最后,我们要注意的是,尽管我们已经形成了主要用于特征是二值问题的朴素贝叶斯算法,但推广至可以取值的情况是简单的。这里,我们仅仅把建模成多项式分布,而不再是伯努利分布。实际上,即使一些原始的输入属性值(比如,房子的居住面积,正如我们之前的例子)是连续的,但是往往可以离散它——就是,把它转化成一小组的离散值——然后应用朴素贝叶斯。例如,如果我们使用某个特征来表示居住面积(living area),我们可以离散这些连续值如下:


因此,对于一个居住面积为890平方英尺的房子,我们设置相应的特征为3。然后我们可以应用朴素贝叶斯算法。然后用一个多项式分布给建模,正如之前描述的一样。当原始的,连续的属性值用一个多元正态分布建模不好时,离散那些特征,然后使用朴素贝叶斯(而不是GDA)往往会得到一个更好的分类器。

2.1  拉普拉斯平滑
朴素贝叶斯算法,正如我们描述的,对于很多问题都工作得相当地好,但有一个简单的改变可以使它工作的更好,尤其对于文本分类。让我们简单的讨论一个使用当前形式算法的问题,然后谈论我们该如何修正这个问题。
考虑垃圾邮件/电子邮件的分类问题,我们假设,在完成了课程CS229且就这个项目做了出色的工作后,你决定大约在2003年6月提交你做的工作到NIPS会议来发表。(NIPS是顶级的机器学习会议之一,而且提交论文的截止时间通常在6月下旬或7月初。) 因为在你的电子邮件中最后讨论了那个会议,所以你也开始得到含有单词“nips”的消息了。但是这是你的第一篇NIPS论文,直到这一次,你之前没有见到过任何含有单词“nips”的电子邮件;特别是“nips”不曾出现在你的垃圾/非垃圾电子邮件训练集中。假定“nips”是词典中的第35000个单词,你的朴素贝叶斯垃圾邮件分类器因此选择参数的最大似然估计为



也就是说,因为之前在垃圾邮件或非垃圾邮件的训练例子中都没有见过“nips”,所以它认为无论在那种邮件中见到这个单词的概率都是0。因此,当试图决定一个包含“nips”的信息是否是垃圾邮件时,它计算类的后验概率,得到


这是因为每一个项包含一个项被乘进去,因此不知道如何做预测。
更广泛的说一下这个问题,因为在有限的训练集中你没有看到某个事件而估计这个事件的概率为0,从统计上这不是一个好主意。考虑一个从取值的服从多项式分布的随机变量的平均数估计问题(这里不是很懂,我理解的是概率估计问题)。我们可以用来参数化我们的多项式分布。给定m个独立的观测值,最大似然估计由


给定。正如我们之前看到的,如果我们使用这些最大似然估计,然后一些可能结果是0,这是一个问题。为了避免这个,我们可以使用拉普拉斯平滑(Laplace smoothing),它使用


来代替上面的估计。这里,我们分子加以,分母加k。要指出的是我们仍然有,这是一个令人满意的特征,因为是对概率的估计,我们知道相加起来必须为1。并且,对于所有的,这解决了我们概率的估计值为0的问题。在一定(可以说是相当强)的条件下,可以发现,拉普拉斯平滑实际给出了的最佳估计量。
回到我们的朴素贝叶斯分类器,使用拉普拉斯平滑,我们因此得到如下的对参数的估计:





(在实践中,我们是否对应用拉普拉斯平滑通常是没有关系的,因为垃圾邮件和非垃圾邮件的每一种,我们通常会有一个合理的部分(即数量),所以将是一个合理的对的估计,而且距离0相当远。)


想写一写机器学习的翻译来巩固一下自己的知识,同时给需要的朋友们提供参考,鉴于作者水平有限,翻译不对或不恰当的地方,欢迎指正和建议。

0 0
原创粉丝点击