Hadoop课程设计-基于Java和mapreduce实现的贝叶斯文本分类器设计程序源代码及说明
> Project 内容
>
> 1:用 MapReduce 算法实现贝叶斯分类器的训练过程,并输出训练模型;
>
> 2:用输出的模型对测试集文档进行分类测试。测试过程可基于单机 Java 程序,也可以是 MapReduce 程序。输出每个测试文档的分类结果;
>
> 3:利用测试文档的真实类别,计算分类模型的 Precision,Recall 和 F1 值。
# 一、贝叶斯分类器理论介绍
本次实验用朴素贝叶斯方法给文本文件分类,即给定一个类标签集合 C={c1,c2,…,cj}以及一个文档 d,给文档 d 分配一个最合适的类别标签 ci(i = 1, …, j)。
解决方法的基本思想就是对于类标签集合 C 中的每个类标签 ci(i = 1, …, j), 计算条件概率 p (ci |d),使条件概率 p (ci |d)最大的类别作为文档 d 最终的类别。
现在将文本分类问题变成计算条件概率 p (ci |d),要计算条件概率,就要用到概率论中的贝叶斯(Bayes)公式,这也是该方法名称的由来。贝叶斯公式如下所示:

公式中的:p (ci|d)为后验概率或条件概率(posterior)、p (ci): 先验概率(prior)、 p (d|ci): 似然概率(likelihood)、p (d): 证据(evidence)。从公式中可以观察到, 当 p(d)是一定值时,后验概率 p (ci|d)取决于似然概率 p (d|ci )和先验概率 p (ci)。故贝叶斯可变为:

由公式可知,后验概率 p (ci|d)与似然概率 p(d|ci )和先验概率 p (ci)的乘积成正比,要计算后验概率 p (ci|d)的最大值,只需计算 p(d|ci)p(ci)最大值即可。
首先先验概率 p(ci)有:

为了计算似然概率 p(d|ci),需要 Term 独立性假设,即文档中每个 term 的出现都是彼此独立的,基与这个假设,基与这个假设,似然概率 p(d|ci):

因此,贝叶斯分类器是通过用训练集数据来计算先验概率 p(ci)和似然概率 p(d|ci),然后利用贝叶斯公式来预测文档 d 应该所属的类别标签 ci。
## 二、贝叶斯分类器训练的 MapReduce 算法设计
该算法实现过程流程和框架在 Main 这个类中定义,主要分三部分: 第一部分是训练过程,对训练集中数据进行训练,即求出每个类中文件数和每个类中的单词种类和数目,并将结果保存在相应文件夹下;第二部分是预测过程,先对测试测试集数据进行处理,然后通过第一部分的训练过程结果求出先验概率和条件概率,然后通过贝叶斯公式找后验概率的最大值来预测测试集文件的类别;第三部分是评估过程,通过第二部分预测的结果和每个预测集文件真实类别的结果来求出精确率 precision、召回率 recall 和 F1,以此判断该系统对文件分类的可靠性。
该系统共使用了 4 个 mapreduce 的过程,记为 job1、job2、job3、job4。在第一部分训练过程用了 job1 和 job2,job1 是用来统计每个类的文件数目,job2 的作用是统计每个类中出现单词数量。在第二部分预测过程中有 job3 和 job4,job3 是 job4 的一个准备过程,是对测试集数据进行欲处理,job4 过程用贝叶斯公式原理来预测文件类别。第三部分评估过程没有用 mapreduce程序,而是直接用单机 Java 程序读取 job4 中的预测结果进行评估该系统的预测可靠性。
### 1 Job1
......