Mahout实践:Mahout分类算法-11

本文档详细介绍了如何在Mahout的local模式下使用Hadoop集群进行贝叶斯分类算法的实践。实验涉及数据准备、环境配置、数据预处理、训练与测试分类器等步骤,展示了在CentOS7.5系统上,使用Apache Mahout 0.13.0和Hadoop 2.7.3进行文档分类的过程。实验结果显示模型在训练集和测试集上的准确度均达到较高水平。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mahout实践:Mahout 分类算法

1、实验描述

  • 本实验在Hadoop集群已经部署的前提下,使得mahout运行local模式下,然后做mahout的分类算法分析。
  • 实验时长:45分钟
  • 主要步骤:
    • 打开hadoop集群
    • 数据准备
    • 修改mahout相关环境变量
    • 数据预处理
    • 训练分类器
    • 测试分类器

2、实验环境

  • 虚拟机数量:3

  • 系统版本:CentOS 7.5

  • Mahout版本:apache-mahout-distribution-0.13.0

  • Hadoop版本:Hadoop 2.7.3

3、相关技能

  • Hadoop 原理
  • Shell 基本命令
  • vim的使用

4、相关知识点

  • Mahout local 模式

  • 贝叶斯分类

5、实现效果

  • 使用Mahout完成文档分类效果如下图所示:
    在这里插入图片描述

图 1

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

在这里插入图片描述

图 2

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:训练集数据
在这里插入图片描述

图 3

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个新闻组数据集转换为<Text,Text> SequenceFile。

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将数据集转换并预处理为包含每个文档的词频的<Text,VectorWritable> SequenceFile。

 [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 使用权重的算法
在这里插入图片描述

图 4

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 

在这里插入图片描述

图 5

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

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

在这里插入图片描述

图 7

6.2.9.4从结果来看我们的模型在训练集上达到了95%的准确度,测试集上表现也尚可,也没有发生过拟合。实验中也可以通过观察的模型的训练参数,做适当的调整。

7、总结

本实验中通过在mahout的local模式下完成了基于朴素贝叶斯模型的分类任务,并查看了最终的分类效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JTZ001

你的鼓励是我创作的最大动力?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值