实验环境:shiyanlou
CentOS6.6 64
JDK:1.7.0_55 64
Hadoop:1.1.2
Mahout是Apache旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的宾实现,帮助开发人员快捷地创建智能应用程序。
Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
http://archive.apache.org/dist/mahout/0.6/
vi /et
cd /home/shiyanlou/install-pack
tar -xzf mahout-distribution-0.6.tar.gz
mv mahout-distribution-0.6 /app/mahout-0.6
设置环境变量
sudo vi /etc/profile
export MAHOUT_HOME=/app/mahout-0.6
export MAHOUT_CONF_DIR=/app/mahout-0.6/conf
export PATH=$PATH:$MAHOUT_HOME/bin
source /etc/profile
echo $PATH
mahout --help
cd /home/shiyanlou/install-pack/class9
http://labfile.oss.aliyuncs.com/courses/237/synthetic_control.data
mkdir /app/mahout-0.6/testdata
mv synthetic_control.data /app/mahout-0.6/testdata
启动hadoop
sudo vi /etc/hosts
192.168.40.4 fee... hadoop
cd /app/hadoop-1.1.2/bin
./start-all.sh
jps
Kmeans是聚类算法中比较简单的一种。聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中没有给定y,只有特征x。比如假设宇宙中的星星中以表示成三维空间中的点集(x,y,x)。聚类的目的是找到每个样本x潜在的odkly,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远。
可使用如下命令进行kmeans算法测试:
cd /app/mahout-0.6/
mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
查看结果
cd /app/mahout-0.6/output
ll
朴素贝叶斯分类是一种简单的分类算法。其思想基础是:对于给出的待分类项,求解在此项出现的条件下各个类别概率哪个最大,就认为此待分类项属于哪个类别。
这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用Mahout的Bayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示。
cd /home/shiyanlou/install-pack/class9
tar -xzf 20news-bydate.tar.gz
mkdir /app/mahout-0.6/data
mv 20news-bydate-t* /app/mahout-0.6/data
ll /app/mahout-0.6/data
cd /app/mahout-0.6
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /app/mahout-0.6/data/20news-bydate-train \
-o /app/mahout-0.6/data/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /app/mahout-0.6/data/20news-bydate-test \
-o /app/mahout-0.6/data/bayes-test-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
在HDFS中新建/class9/20news文件夹,把生成的训练集和测试集上传到HDFS的/class9/20news目录中:
hadoop fs -mkdir /class9/20news
hadoop fs -put /app/mahout-0.6/data/bayes-train-input /class9/20news
hadoop fs -put /app/mahout-0.6/data/bayes-test-input /class9/20news
hadoop fs -ls /class9/20news
hadoop fs -ls /class9/20news/bayes-test-input
使用trainclassifier类训练在HDFS中/class9/20news/bayes-train-input的数据,生成的模型放到/class9/ 20news/newsmodel 目录中:
mahout trainclassifier \
-i hdfs://hadoop:9000/class9/20news/bayes-train-input/ \
-o hdfs://hadoop:9000/class9/20news/newsmodel \
-type cbayes \
-ng 2 \
-source hdfs
可以通过Hadoop观察到训练作业运行过程。
hadoop fs -lsr /class9/20news/newsmodel
mahout testclassifier \
-m hdfs://hadoop:9000/class9/20news/newsmodel \
-d hdfs://hadoop:9000/class9/20news/bayes-test-input \
-type cbayes \
-ng 2 \
-source hdfs \
-method mapreduce
结果是一个混合矩阵。
实验过程最后两步未能如期输出结果,待检查。
在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 四个选项中选择第一个选项.