朴素贝叶斯迷你项目

文章目录
  1. 1. 项目背景
  2. 2. 环境准备
  3. 3. 运行代码
  4. 4. 对分类器计时
  5. 5. 源码分享
  6. 6. 书签

项目背景

几年前,J.K. 罗琳(凭借《哈利波特》出名)试着做了件有趣的事。她以 Robert Galbraith 的化名写了本名叫《The Cuckoo’s Calling》的书。尽管该书得到一些不错的评论,但是大家都不太重视它,直到 Twitter 上一个匿名的知情人士说那是 J.K. Rowling 写的。《伦敦周日泰晤士报》找来两名专家对《杜鹃在呼唤》和 Rowling 的《偶发空缺》以及其他几名作者的书进行了比较。分析结果强有力地指出罗琳就是作者,《泰晤士报》直接询问出版商情况是否属实,而出版商也证实了这一说法,该书在此后一夜成名。

我们也将在此项目中做类似的事。我们有一组邮件,分别由同一家公司的两个人撰写其中半数的邮件。我们的目标是仅根据邮件正文区分每个人写的邮件。在这个迷你项目一开始,我们将使用朴素贝叶斯,并在之后的项目中扩展至其他算法。

我们会先给你一个字符串列表。每个字符串代表一封经过预处理的邮件的正文;然后,我们会提供代码,用来将数据集分解为训练集和测试集(在下节课中,你将学习如何进行预处理和分解,但是现在请使用我们提供的代码)。

朴素贝叶斯特殊的一点在于,这种算法非常适合文本分类。在处理文本时,常见的做法是将每个单词看作一个特征,这样就会有大量的特征。此算法的相对简单性和朴素贝叶斯独立特征的这一假设,使其能够出色完成文本的分类。在这个迷你项目中,你将在计算机中下载并安装 sklearn,然后使用朴素贝叶斯根据作者对邮件进行分类。

环境准备

1、检查你是否装有可用的 python,版本最好是 2.6 或 2.7(这是我们使用的版本 - 其他版本应该也可以,但我们不敢保证)。
2、我们会使用 pip 来安装一些包。首先,从此处获取并安装 pip。
3、使用 pip 安装一系列 Python 包:

  • 转到终端行界面(请勿打开 Python,只打开命令提示符)
  • 安装 sklearn: pip install scikit-learn
  • 此处包含 sklearn 安装说明,可供参考

4、安装自然语言工具包:pip install nltk
5、获取机器学习简介源代码。你将需要 git 来复制资源库:git clone https://github.com/udacity/ud120-projects.git

你只需操作一次,基础代码包含所有迷你项目的初始代码。进入 tools/ 目录,运行 startup.py。该程序首先检查 python 模块,然后下载并解压缩我们在后期将大量使用的大型数据集。下载和解压缩需要一些时间,但是你无需等到全部完成再开始第一部分。

运行代码

naive_bayes/nb_author_id.py 中创建和训练朴素贝叶斯分类器,用其为测试集进行预测。准确率是多少?

1
2
training time: 1.517 s
0.973265073948

在训练期间,你可能会看到以下错误:“用户警告:分数重复。结果可能取决于特征排序,或者你对回归任务使用了分类分数。” 警告(“分数重复。结果可能取决于特征排序。”)

邮件中两个以上的单词恰巧具有相同的使用模式时,会出现这一警告—对算法而言,这表示两个特征是相同的。当重复特征出现时,一些算法实际上会中断(数学上无法运行),或给出多个不同的答案(取决于特征排序),然后 sklearn 发出警告。这种信息能起到帮助作用,所以我们无需担心。

练习: 作者身份准确率
在此问题中,一些学员在执行代码时会遇到内存问题。为了降低运行代码时看到内存错误的提示,我们建议你使用 RAM 至少为 2GB 的计算机。如果你发现代码造成内存错误,你也可以尝试在 email_preprocess.py 文件中设置 test_size = 0.5。

对分类器计时

我们之前未明确提及的一个重要主题是何时训练和测试算法。在你分类器所在行的上方和下方插入两行代码,就像这样:

1
2
3
t0 = time()
< 你的 clf.fit() 代码行 >
print 'training time:', round(time()-t0, 3), 's'

在你的 clf.predict() 代码行前后也加上这段代码,这样你可以比较训练分类器的所需时间,并作出预测。训练和预测哪一个更快?

我们会把朴素贝叶斯的用时与其他几种算法比较,所以请记下你得到的时间和准确率,在下一个迷你项目中,我们还会用到。

源码分享

https://github.com/voidking/ud120-projects

书签

机器学习入门
https://cn.udacity.com/course/intro-to-machine-learning--ud120