1 运行环境说明node
1.1 硬软件环境算法
1.2 机器网络环境shell
2 书面做业0:搭建Mahout环境apache
2.1 Mahout介绍网络
2.2 部署过程机器学习
2.2.1 下载Mahoutjsp
2.2.2 上传Mahoutide
2.2.3 解压缩工具
2.2.4 设置环境变量oop
2.2.5 验证安装完成
2.3 测试例子
2.3.1 下载测试数据,放到$MAHOUT_HOME/testdata目录
2.3.2 启动Hadoop
2.3.3 使用kmeans算法
2.3.4 查看结果
3 书面做业1:运行20newsgroup
3.1 书面做业1内容
3.2 算法流程
3.3 实现过程(mahout 0.6版本)
3.3.1 下载数据
3.3.2 上传并解压数据
3.3.3 创建训练集
3.3.4 创建测试集
3.3.5 上传数据到HDFS
3.3.6 训练贝叶斯分类器
3.3.7 观察训练做业运行过程
3.3.8 查看生成模型
3.3.9 测试贝叶斯分类器
3.3.10观察训练做业运行过程
3.3.11查看结果
3.4 实现过程(mahout 0.7+版本)
4 问题解决
4.1 使用mahout0.7+版本对20Newsgroup数据创建训练集时出错
l 主机操做系统:Windows 64 bit,双核4线程,主频2.2G,6G内存
l 虚拟软件:VMware® Workstation 9.0.0 build-812388
l 虚拟机操做系统:CentOS 64位,单核,1G内存
l JDK:1.7.0_55 64 bit
l Hadoop:1.1.2
集群包含三个节点:1个namenode、2个datanode,其中节点之间能够相互ping通。节点IP地址和主机名分布以下:
序号 |
机器名 |
类型 |
用户名 |
运行进程 |
|
1 |
10.88.147.221 |
hadoop1 |
名称节点 |
hadoop |
NN、SNN、JobTracer |
2 |
10.88.147.222 |
hadoop2 |
数据节点 |
hadoop |
DN、TaskTracer |
3 |
10.88.147.223 |
hadoop3 |
数据节点 |
hadoop |
DN、TaskTracer |
全部节点均是CentOS6.5 64bit系统,防火墙均禁用,全部节点上均建立了一个hadoop用户,用户主目录是/usr/hadoop。全部节点上均建立了一个目录/usr/local/hadoop,而且拥有者是hadoop用户。
Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地建立智能应用程序。AMahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,经过使用 Apache Hadoop 库,Mahout 能够有效地扩展到云中。
在Apache下载最新的Mahout软件包,点击下载会推荐最快的镜像站点,如下为下载地址:http://archive.apache.org/dist/mahout/0.6/
把下载的mahout-distribution-0.6.tar.gz安装包,使用SSH Secure File Transfer工具(第1、2做业周2.1.3.1介绍)上传到/home/hadoop/Downloads 目录下
在Downloads目中将mahout解压缩
cd /home/hadoop/Downloads/
tar -xzf mahout-distribution-0.6.tar.gz
把mahout-distribution-0.6目录移到/usr/local目录下
sudo mv mahout-distribution-0.6 /usr/local/mahout-0.6
cd /usr/local
ls
使用以下命令编辑/etc/profile文件:
sudo vi /etc/profile
声明mahout的home路径和在path加入bin的路径:
export MAHOUT_HOME=/usr/local/mahout-0.6
export MAHOUT_CONF_DIR=/usr/local/mahout-0.6/conf
export PATH=$PATH:$MAHOUT_HOME/bin
编译配置文件/etc/profile,并确认生效
source /etc/profile
从新登陆终端,确保hadoop集群启动,键入mahout --help命令,检查Mahout是否安装无缺,看是否列出了一些算法:
mahout --help
下载一个文件synthetic_control.data,下载地址http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data,并把这个文件放在$MAHOUT_HOME目录下
cd /home/hadoop/Downloads/
mv synthetic_control.data /usr/local/mahout-0.6/
mkdir testdata
cp synthetic_control.data testdata/
ls
./start-all.sh
使用以下命令进行kmeans算法测试:
mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
结果会在根目录创建output新文件夹,若是下图结果表示mahout安装正确且运行正常:
cd output
ls
安装Mahout,并运行20newsgroup的测试样例,抓图说明实验过程
朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的几率哪一个最大,就认为此待分类项属于哪一个类别。
这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不一样的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中做为实验,根据机器学习技术。例如文本分类,文本汇集。咱们将使用Mahout的Bayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示
下载20Newsgroups数据集,地址为 http://qwone.com/~jason/20Newsgroups/ ,下载20news-bydate.tar.gz数据包
把下载的20news-bydate.tar.gz数据包,使用SSH Secure File Transfer工具(第1、2做业周2.1.3.1介绍)上传到/home/hadoop/Downloads 目录下:
解压20news-bydate.tar.gz数据包,解压后能够看到两个文件夹,分别为训练原始数据和测试原始数据:
cd /home/hadoop/Downloads/
tar -xzf 20news-bydate.tar.gz
在mahout根目录下建data文件夹,而后把20news训练原始数据和测试原始数据迁移到该文件夹下:
mkdir /usr/local/mahout-0.6/data
mv 20news-bydate-t* /usr/local/mahout-0.6/data
ls /usr/local/mahout-0.6/data
经过以下命令创建训练集,训练的数据在20news-bydate-train目录中,输出的训练集目录为 bayes-train-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.6/data/20news-bydate-train \
-o /usr/local/mahout-0.6/data/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
经过以下命令创建训练集,训练的数据在20news-bydate-test目录中,输出的训练集目录为 bayes-test-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.6/data/20news-bydate-test \
-o /usr/local/mahout-0.6/data/bayes-test-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
在HDFS中新建./20news文件夹,把生成的训练集和测试集上传到HDFS的./20news目录中:
hadoop fs -mkdir ./20news
hadoop fs -put /usr/local/mahout-0.6/data/bayes-train-input ./20news
hadoop fs -put /usr/local/mahout-0.6/data/bayes-test-input ./20news
hadoop fs -ls ./20news
hadoop fs -ls ./ 20news/bayes-test-input
使用trainclassifier类训练在HDFS中./20news/bayes-train-input的数据,生成的模型放到./ 20news/newsmodel 目录中:
mahout trainclassifier \
-i /user/hadoop/20news/bayes-train-input \
-o /user/hadoop/20news/newsmodel \
-type cbayes
-ng2 \
-source hdfs
在训练过程当中在JobTracker页面观察运行状况,连接地址为http://hadoop1:50030/jobtracker.jsp,训练任务四个做业,大概运行了15分钟左右:
点击查看具体做业信息
map运行状况
做业运行状况
经过以下命令查看模型内容:
hadoop fs -ls ./20news
hadoop fs -ls ./20news/newsmodel
hadoop fs -ls ./20news/newsmodel/trainer-tfIdf
使用testclassifier类训练在HDFS中./20news/bayestest-input的数据,使用的模型路径为./ 20news/newsmodel:
mahout testclassifier \
-m /user/hadoop/20news/newsmodel \
-d /user/hadoop/20news/bayes-test-input \
-type cbayes
-ng2 \
-source hdfs\
-method mapreduce
在执行过程当中在JobTracker页面观察运行状况,连接地址为http://hadoop1:50030/jobtracker.jsp,训练任务1个做业,大概运行了5分钟左右:
做业的基本信息
map运行状况
reduce运行状况
这个混合矩阵的意思说明:上述a到u分别是表明了有20类别,这就是咱们以前给的20个输入文件,列中的数听说明每一个类别中被分配到的字节个数,classified说明应该被分配到的总数
381 0 0 0 0 9 1 0 0 0 1 0 0 2 0 1 0 0 3 0 0 | 398 a = rec.motorcycles
意思为rec.motorcycles 原本是属于 a,有381篇文档被划为了a类,这个是正确的数据,其它的分别表示划到 b~u类中的数目。咱们能够看到其正确率为 381/398=0.9573 ,可见其正确率仍是很高的了。
在0.7版本的安装目录下$MAHOUT_HOME/examples/bin下有个脚本文件classifu-20newsgroups.sh,这个脚本中执行过程是和前面分布执行结果是一致的,只不过将各个API用shell脚本封装到一块儿了。从0.7版本开始,Mahout移除了命令行调用的API:prepare20newsgroups、trainclassifier和testclassifier,只能经过shell脚本执行。
执行 $MAHOUT_HOME/examples/bin/classify-20newsgroups.sh 四个选项中选择第一个选项,
使用以下命令对20Newsgroupt数据创建训练集时:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.9/data/20news-bydate-train \
-o /usr/local/mahout-0.9/data/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer\
-c UTF-8
出现以下错误,缘由在于从0.7版本开始,Mahout移除了命令行调用的prepare20newsgroups、trainclassifier和testclassifier API,只能经过shell脚本执行$MAHOUT_HOME/examples/bin/classify-20newsgroups.sh进行
14/12/7 21:31:35 WARN driver.MahoutDriver: Unable to add class: org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups
14/12/7 21:31:35 WARN driver.MahoutDriver: No org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups.props found on classpath, will use command-line arguments only
Unknown program 'org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups' chosen.
Valid program names are:
arff.vector: : Generate Vectors from an ARFF file or directory
baumwelch: : Baum-Welch algorithm for unsupervised HMM training
.......
调用shell脚本执行参见3.4