- 本实验在Hadoop集群已经部署的前提下,使得mahout运行local模式下,然后做mahout的分类算法分析。
- 实验时长:45分钟
- 主要步骤:
- 打开hadoop集群
- 数据准备
- 修改mahout相关环境变量
- 数据预处理
- 训练分类器
- 测试分类器
-
虚拟机数量:3
-
系统版本:CentOS 7.5
-
Mahout版本:apache-mahout-distribution-0.13.0
-
Hadoop版本:Hadoop 2.7.3
- Hadoop 原理
- Shell 基本命令
- vim的使用
-
Mahout local 模式
-
贝叶斯分类
- 使用Mahout完成文档分类效果如下图所示:
6、实验步骤
6.1贝叶斯分类:
6.1.1贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
6.1.2由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。
6.2数据准备:
6.2.1在master节点,拷贝实验用的数据news_20到zkpk的家目录下
[zkpk@master ~]$ cd [zkpk@master ~]$ cp /home/zkpk/experiment/20news-bydate.tar.gz /home/zkpk/
6.2.2解压数据到指定的目录
[zkpk@master ~]$ mkdir news_20 [zkpk@master ~]$ tar xvzf 20news-bydate.tar.gz -C /home/zkpk/news_20
6.2.3查看解压后的数据目录
[zkpk@master ~]$ cd news_20/ [zkpk@master news_20]$ ll
6.2.3.120news-bydate-test:测试集数据
6.2.3.220news-bydate-train:训练集数据
6.2.4本次实验我们使用mahout的local模式,具体 *** 作如下
6.2.4.1修改配置文件.bash_profile,在文件末尾增加环境变量
[zkpk@master news_20]$ cd [zkpk@master ~]$ [zkpk@master ~]$ vim .bash_profile
6.2.4.2在编辑模式下,在文件末尾增加如下内容,然后退出编辑模式,输入":wq",保存并关闭文件:
export MAHOUT_LOCAL=true
6.2.4.3使用source命令,使得环境变量生效。
[zkpk@master ~]$ source ~/.bash_profile
6.2.5将完整的20个新闻组数据集转换为
6.2.5.1输入数据目录
6.2.5.2输出的Sequence文件目录;可通过运行“mahout seqdirectory”来查看相关的命令选项的用法
[zkpk@master ~]$ mahout seqdirectory -i news_20/ -o news_20/20news-seq -ow
6.2.6将数据集转换并预处理为包含每个文档的词频的
[zkpk@master ~]$ mahout seq2sparse -i news_20/20news-seq/ -o news_20/20news-vectors -lnorm -nv -wt tfidf
6.2.6.1-i: 输入的数据目录
6.2.6.2-o: 输出的数据目录
6.2.6.3-lnorm : 输出的向量是否使用logNormalize 是否使用log函数归一化
6.2.6.4-nv :可选项, namedvectors 输出向量设置为named向量
6.2.6.5-wt: 词频使用tfidf 使用权重的算法
6.2.7将预处理的数据集分成训练集和测试集。
[zkpk@master ~]$ mahout split -i news_20/20news-vectors/tfidf-vectors/ --trainingOutput news_20/20news-train-vectors --testOutput news_20/20news-test-vectors --randomSelectionPct 35 --overwrite --sequenceFiles -xm sequential
6.2.7.1-i: 输入目录即待切分目录
6.2.7.2-trainingOutput : 训练集输出目录
6.2.7.3-testOutput: 测试集输出目录
6.2.7.4-randomSelectionPct :百分比,多少数据被随机作为测试集
6.2.7.5–overwrite: 输出数据为覆盖模式
6.2.7.6–sequenceFiles :指定输出文件格式为sequence。
6.2.7.–xm:执行的方法;有sequential及mapreduce两种
6.2.8训练分类器
[zkpk@master ~]$ mahout trainnb -i news_20/20news-train-vectors/ -o news_20/model -li news_20/labelindex -ow
6.2.8.1参数说明:-li:设置存储label index的路径;其它参数作用同上。
6.2.9测试分类器
6.2.9.1首先在训练集上做测试,查看效果
[zkpk@master ~]$ mahout testnb -i news_20/20news-train-vectors/ -m news_20/model/ -l news_20/labelindex -ow -o news_20/20news-testing1
6.2.9.2参数说明:-m:用于设置路径,存储在模型训练过程中,得到的模型;-l:指定label index路径;其它参数意义同上
6.2.9.3在测试集上做测试,查看效果
[zkpk@master ~]$ mahout testnb -i news_20/20news-test-vectors/ -m news_20/model/ -l news_20/labelindex -ow -o news_20/20news-testing1
6.2.9.4从结果来看我们的模型在训练集上达到了95%的准确度,测试集上表现也尚可,也没有发生过拟合。实验中也可以通过观察的模型的训练参数,做适当的调整。
7、总结本实验中通过在mahout的local模式下完成了基于朴素贝叶斯模型的分类任务,并查看了最终的分类效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)