(1)http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
点击链接,下载数据集synthetic_control.data。
将数据集synthetic_control.data放到MAHOUT_HOME目录下面,(注意:这里一定要放到此目录下,否则会异常报错)
(2)启动Hadoop
hadoop@master:~$ start-all.sh
(3)创建测试目录testdata(这里的目录的名字只能是testdata)
hadoop@master:~$ hadoop dfs -mkdir testdata (创建后的路径为:/user/hadoop/testdata)
(4)并把数据导入到这个tastdata目录中
hadoop@master:~$ hadoop fs -put /home/hadoop/mahout/mahout-distribution-0.7/synthetic_control.data testdata
(5)使用kmeans算法
hadoop@master:~$ hadoop jar $MAHOUT_HOME/mahout-examples-0.7-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
(方法有:kmeans canopy fuzzykmeans dirichlet meanshift)
(6)查看运行结果。依次运行下列命令: (运行结果保存在:/user/hadoop/output)
hadoop@master:~$ hadoop dfs -ls output
hadoop@master:~$ hadoop dfs -get output $MAHOUT_HOME/examples (从hdfs上下载到本地)
hadoop@master:~$ cd $MAHOUT_HOME/examples/output
hadoop@master:~/mahout/mahout-distribution-0.7/examples/output$ ls
如果看到以下结果,那么算法运行成功,你的安装也就成功了:
canopies clusters-1 clusters-3 clusters-5 clusters-7 points
clusters-0 clusters-2 clusters-4 clusters-6 data
(这些文件都是sequenceFile的方式,直接打开会出现乱码!)
(7)对测试结果进行分析:
<1>数据类型分析:
<a>clusteredPoints:存放的是最后聚类的结果,将cluster-id和documents-id都展示出来了,用mahout seqdumper读clusteredPoints结果的key-value类型是(IntWritable,WeightedVectorWritable)
<b>clusters-N:是第N次聚类的结果,其中n为某类的样本数目,c为各类各属性的中心,r为各类属性的半径。 clusters-N结果类型是(Text,Cluster)
<c>data:存放的是原始数据,这个文件夹下的文件可以用mahout vectordump来读取,原始数据是向量形式的,其它的都只能用mahout seqdumper来读取,向量文件也可以用mahout seqdumper来读取,只是用vectordump读取出来的是数字结果,没有对应的key,用seqdumper读出来的可以看到key,即对应的url,而value读出来的是一个类描述,而不是数组向量
<2>命令类型分析:
mahout seqdumper:将SequenceFile文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java
mahout vectordump:将向量文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.vectors.VectorDumper.java
mahout clusterdump:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java
<3>实际命令如下(-i <hdfs上的路径> -o <本地路径>):
hadoop@master:~$ mahout seqdumper -i /user/hadoop/output/clusteredPoints/part-m-00000 -o /home/hadoop/data/result_points.txt
hadoop@master:~$ mahout vectordump -i /user/hadoop/output/data/part-m-00000 -o /home/hadoop/data/result_data.txt
hadoop@master:~$ mahout seqdumper -i /user/hadoop/output/clusters-2/part-r-00000 -o /home/hadoop/data/result_clusters2.txt
hadoop@master:~$ mahout clusterdump --input /user/hadoop/output/clusters-0 --pointsDir /user/hadoop/output/clusteredPoints --output /home/hadoop/data/result_clusters0.txt
(这个命令会将每一类的点列出来,input指向的目录存放的是某类有几个点和该类的质心点及半径,即clusters-N目录,pointsDir指向的是所有输入点归于哪一类,即clusteredPoints目录,两者联合起来,就可以列举出属于同一类的所有点)
(注意input指向的目录,要是最后一次迭代的结果目录,最后一次迭代的结果才是最终的结果)
(1)SequenceFile介绍
SequeceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key, value>对序列化到文件中。一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。
这种文件格式有以下好处:
支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)
本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。
难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。
坏处是需要一个合并文件的过程,且合并后的文件将不方便查看。
(2)mahout与SequenceFile
首先简单说明下,mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile。
SequenceFile是hadoop中的一个类,允许我们向文件中写入二进制的键值对,
具体介绍请看eyjian写的http://www.hadoopor.com/viewthread.php?tid=144&highlight=sequencefile
输入命令(--input和--output的路径必须一样):
<1>把txt文本文件转换成sequenceFile
hadoop@master:~$ mahout seqdirectory --input /test/ --output /test/ --charset UTF-8
结果可以看到:在test目录下多了1个文件(chunk-0), 这就是我们要的SequenceFile格式文件
问题:在我的测试中并没有用到这个命令??????????
<2>将SequenceFile文件转成文本形式:
hadoop@master:~$ mahout seqdumper -s /test/chunk-0 -o test.txt
注意1:mahout-0,5中-s:表示输入文件路径, mahout-0.8中-i:表示输入文件路径。输入路径是指HDFS上的路径
注意2:输出路径test.txt----存放在/home/hadoop中,也就是本地路径
(3)mahout中的测试数据下载
数据源:http://kdd.ics.uci.edu/databases/里面有大量经典数据提供下载
(4)maven编译mahout的源文件
下载mahout-0.7的源文件(src文件:mahout-distribution-0.7-src.tar.gz):http://apache.etoak.com//mahout/0.7/ 解压,我放在/home/hadoop/mahout-src下,
<1>进入mahout-0.7源文件目录:cd $MAHOUT_HOME,
<2>编译mahout源文件的命令:mvn install 或 mvn install -Dmaven.test.skip=true
注意1:因为maven是编译mahout的源文件,所以要下载mahout-distribution-0.7-src.tar.gz版本,如果下载的是mahout-distribution-0.7.tar.gz版本,在mahout的安 装目录下执行命令:mvn install时,会提示错误,找不到pom.xml。
注意2:使用mvn install:会比较慢,因为测试过程会比较慢,而且容易失败!!
注意3:使用mvn install -Dmaven.test.skip=true:Maven 提供了跳过单元测试的能力,只需要使用 Surefire 插件的 skip 参数。 在命令行,只要简单的给任何目标添加 maven.test.skip 属性就能跳过测试
(1)kmeans算法简介
同一聚类中的对象相似度较高,而不同聚类中的对象相似度较小。
以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
首先从n个数据对象任意选择 k个 对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后 再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
对于每一个 cluster,我们可以选出一个中心点 (center),使得该 cluster中的所有的点到该中心点的距离小于到其他 cluster的中心的距离
(2)canopy算法简介
Canopy 算法首先会要求输入两个阀值 T1和T2,T1>T2;算法有一个集群这里叫Canopy的集合(Set),当然一开始它是空的;然后会将读取到的第一个点作为集合中的一个 Canopy,接着读取下一个点,若该点与集合中的每个Canopy计算距离,若这个距离小于T1,则这个点会分配给这个Canopy(一个点可以分配给 多个Canopy),而当这个距离小于T2时这个点不能作为一个新的Canopy而放到集合中。也就是说当一个点只要与集合中任意一个Canopy的距离 小于T2了,即表示它里那个Canopy太近不能作为新的Canopy。若都没有则生成一个新的Canopy放入集合中。以此循环,直到没有点了。
首先通过Canopy算法进行聚类,以确定簇数以及初始簇心的,接着通过K-means算法进行迭代运算,收敛出最后的聚类结果。
折腾死了,总结下:
1.运行kmeans算法的时候下载的是mahout-distribution-0.8.tar.gz,是编译后的版本(安装版),运行的很顺利!当运行bayes(贝叶斯)算法时出问题了,按照mahout官网上的步骤,执行mvn install是报错:说找不到pom.xml!!发现:这个是在源码上运行的!!这才又下载了mahout-distribution-0.8-src.tar.gz,直接编译(mvn install)的时候并没成功,又把源码导入到eclipse中,修修改改,终于编译成功了!!
2.但是当运行命令:mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups .......的时候,就报错:说找不到PrepareTwentyNewsgroups!!经过一番折腾,终于发现mahout-distribution-0.7-src里面bayes的文件夹为空(或者就没有这个文件夹)!!然后就去找mahout前几个版本,把mahout-distribution-0.4-src到mahout-distribution-0.8-src都下载下来了,0.7和0.8里面没有bayes的文件夹,0.4和0.6里面虽然bayes的文件夹不为空,但是总编译不成功,最后只有0.5没有问题!!
bayes(贝叶斯)算法简介
朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。
这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用Mahout的Bayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示
mahout运行bayes(贝叶斯)算法的前提条件:
(1)启动hadoop
hadoop@master:~$ start-all.sh
(2)成功编译mahout源码
hadoop@master:~$ cd $MAHOUT_HOME
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ mvn install -Dmaven.test.skip=true
mahout运行bayes(贝叶斯)算法的步骤:
(1)生成input的数据
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups -p /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-data/20news-bydate/20news-bydate-train -o /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-result/bayes-train-input -a org.apache.mahout.vectorizer.DefaultAnalyzer -c UTF-8
运行结果:
Running on hadoop, using HADOOP_HOME=/home/hadoop/cloud/hadoop-1.0.4
HADOOP_CONF_DIR=/home/hadoop/cloud/confDir/hadoop/conf
Warning: $HADOOP_HOME is deprecated.
13/08/09 14:07:09 WARN driver.MahoutDriver: No org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups.props found on classpath, will use command-line arguments only
13/08/09 14:07:14 INFO driver.MahoutDriver: Program took 5202 ms
(2)生成test的数据
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups -p /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-data/20news-bydate/20news-bydate-test -o /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-result/bayes-test-input -a org.apache.mahout.vectorizer.DefaultAnalyzer -c UTF-8
运行结果:
Running on hadoop, using HADOOP_HOME=/home/hadoop/cloud/hadoop-1.0.4
HADOOP_CONF_DIR=/home/hadoop/cloud/confDir/hadoop/conf
Warning: $HADOOP_HOME is deprecated.
13/08/09 14:13:35 WARN driver.MahoutDriver: No org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups.props found on classpath, will use command-line arguments only
13/08/09 14:13:38 INFO driver.MahoutDriver: Program took 3428 ms
(3)将训练文本集上传到HDFS上
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ hadoop dfs -put /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-result/bayes-train-input/ bayes-train-input
(4)模型训练:依据训练文本集来训练贝叶斯分类器模型
解释一下命令:-i:表示训练集的输入路径,HDFS路径; -o:分类模型输出路径; -type:分类器类型,这里使用bayes,可选cbayes;
-ng:(n-gram)建模的大小,默认为1; -source:数据源的位置,HDFS或HBase
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ mahout trainclassifier -i bayes-train-input -o bayes-newsmodel -type bayes -ng 1 -source hdfs
(5)将测试文本集上传到HDFS上
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ hadoop dfs -put /home/hadoop/mahout-0.5-src/mahout-distribution-0.5/my-test-result/bayes-test-input/ bayes-test-input
(6)模型测试:依据训练的贝叶斯分类器模型来进行分类测试
hadoop@master:~/mahout-0.5-src/mahout-distribution-0.5$ mahout testclassifier -m bayes-newsmodel -d bayes-test-input -type bayes -ng 1 -source hdfs -method mapreduce
运行结果(与apache官网里面的一致):
13/08/09 14:56:34 INFO bayes.BayesClassifierDriver: =======================================================
Confusion Matrix
-------------------------------------------------------
a b c d e f g h i j k l m n o p q r s t u <--Classified as
381 0 0 0 0 9 1 0 0 0 1 0 2 0 0 1 0 0 3 0 0 | 398 a = rec.motorcycles
1 284 0 0 0 0 1 0 6 3 11 0 3 66 0 1 6 0 4 9 0 | 395 b = comp.windows.x
2 0 339 2 0 3 5 1 0 0 0 0 1 1 12 1 7 0 2 0 0 | 376 c = talk.politics.mideast
4 0 1 327 0 2 2 0 0 2 1 1 5 0 1 4 12 0 2 0 0 | 364 d = talk.politics.guns
7 0 4 32 27 7 7 2 0 12 0 0 0 6 100 9 7 31 0 0 0 | 251 e = talk.religion.misc
10 0 0 0 0 359 2 2 0 1 3 0 6 1 0 1 0 0 11 0 0 | 396 f = rec.autos
0 0 0 0 0 1 383 9 1 0 0 0 0 0 0 0 0 0 3 0 0 | 397 g = rec.sport.baseball
1 0 0 0 0 0 9 382 0 0 0 0 1 1 1 0 2 0 2 0 0 | 399 h = rec.sport.hockey
2 0 0 0 0 4 3 0 330 4 4 0 12 5 0 0 2 0 12 7 0 | 385 i = comp.sys.mac.hardware
0 3 0 0 0 0 1 0 0 368 0 0 4 10 1 3 2 0 2 0 0 | 394 j = sci.space
0 0 0 0 0 3 1 0 27 2 291 0 25 11 0 0 1 0 13 18 0 | 392 k = comp.sys.ibm.pc.hardware
8 0 1 109 0 6 11 4 1 18 0 98 3 1 11 10 27 1 1 0 0 | 310 l = talk.politics.misc
6 0 1 0 0 4 2 0 5 2 12 0 321 8 0 4 14 0 8 6 0 | 393 m = sci.electronics
0 11 0 0 0 3 6 0 10 7 11 0 13 298 0 2 13 0 7 8 0 | 389 n = comp.graphics
2 0 0 0 0 0 4 1 0 3 1 0 1 3 372 6 0 2 1 2 0 | 398 o = soc.religion.christian
4 0 0 1 0 2 3 3 0 4 2 0 12 7 6 342 1 0 9 0 0 | 396 p = sci.med
0 1 0 1 0 1 4 0 3 0 1 0 4 8 0 2 369 0 1 1 0 | 396 q = sci.crypt
10 0 4 10 1 5 6 2 2 6 2 0 1 2 86 15 14 152 0 1 0 | 319 r = alt.atheism
4 0 0 0 0 9 1 1 8 1 12 0 6 3 0 2 0 0 341 2 0 | 390 s = misc.forsale
8 5 0 0 0 1 6 0 8 5 50 0 2 39 1 0 9 0 3 257 0 | 394 t = comp.os.ms-windows.misc
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 u = unknown
Default Category: unknown: 20
13/08/09 14:56:34 INFO driver.MahoutDriver: Program took 118128 ms
参考文章:
(1)mahout官网:https://cwiki.apache.org/confluence/display/MAHOUT/Twenty+Newsgroups
(2)http://blog.csdn.net/crazyzhb2012/article/details/9795609
(3)http://blog.csdn.net/zc55803903/article/details/7933126
http://www.360doc.com/content/14/0609/10/5205831_385026662.shtml
大家可以加我个人微信号:scccdgf
相关推荐
这个压缩包包含的是Mahout项目不同版本的核心库,分别是mahout-core-0.9.jar、mahout-core-0.8.jar和mahout-core-0.1.jar。这些版本的差异在于功能的完善、性能的优化以及对新特性的支持。 1. **Mahout核心功能**:...
**马哈多(Mahout)库的概述** 马哈多(Mahout)是Apache软件基金会的一个开源项目,专注于提供可扩展的机器学习库。它基于Hadoop,这意味着它能够利用分布式计算来处理大规模数据集。 Mahout的目标是帮助开发人员...
Apache Mahout是一个基于Java的开源机器学习库,它提供了丰富的算法和工具,用于构建智能应用程序,特别是关注推荐系统、分类和聚类分析。"mahout-distribution-0.9.tar.gz"是Apache Mahout的0.9版本的发行包,包含...
Mahout:整体框架,实现了协同过滤 Deeplearning4j,构建VSM Jieba:分词,关键词提取 HanLP:分词,关键词提取 Spring Boot:提供API、ORM 关键实现 基于用户的协同过滤 直接调用Mahout相关接口即可 选择不同...
Apache Mahout是一个开源项目,专注于开发可扩展的机器学习库,它主要由Java语言编写,并且依赖于Maven构建系统。在"apache-mahout-distribution-0.11.0-src.zip"这个压缩包中,您将找到Mahout 0.11.0版本的源代码,...
《Apache Maven与Mahout实战:基于maven_mahout_template-mahout-0.8的探索》 Apache Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。它通过一个项目对象模型(Project Object Model,POM)来...
Apache Mahout是一个Apache开源数据挖掘和机器学习项目,它提供了一系列基于Java的工具和库,用于构建可扩展的推荐系统、聚类算法以及其他机器学习应用。Mahout的目标是简化数据挖掘任务的实现,使其不仅仅局限于...
Apache Mahout是一个基于Hadoop的数据挖掘库,它提供了多种推荐算法的实现,如协同过滤、基于内容的推荐以及混合推荐方法。 Mahout的协同过滤算法是其核心功能之一,它通过分析用户的历史行为来预测他们可能感兴趣...
### Mahout概述与应用场景 #### 一、Mahout简介 Mahout是Apache基金会下的一个开源机器学习项目。该项目主要关注于构建高效的机器学习算法库,尤其是面向大规模数据集的处理需求。Mahout的设计理念强调了算法的可...
根据给定的文件信息,我们可以提炼出以下几个与Apache Mahout及其Taste Webapp相关的知识点: 1. Apache Mahout简介 Apache Mahout是一个开源项目,隶属于Apache软件基金会(ASF),专门提供可扩展的机器学习算法...
**Apache Mahout简介** Apache Mahout 是一个开源项目,它为大数据分析提供了机器学习库。这个库主要关注三个核心领域:推荐系统、分类和聚类。Mahout 的目标是使开发人员能够轻松构建智能应用程序,利用分布式计算...
Mahout提供了这些相似度度量的实现,使得开发人员能够灵活选择最适合其应用场景的方法。 ### 集群 集群是无监督学习的一种形式,其目的是将一组对象分为几个类别或“集群”,使得同一集群内的对象彼此相似,而不同...
《MAHOUT实战》这本书是关于Apache Mahout机器学习库的中文版指南,旨在帮助读者理解和应用Mahout进行大数据分析和构建智能应用。Apache Mahout是一个开源项目,它提供了可扩展的机器学习算法,用于分类、聚类和推荐...
《大数据Mahout实践指南》是一本深入探讨大数据分析与机器学习技术的专业书籍,尤其侧重于Apache Mahout框架的应用。Mahout是Apache软件基金会的一个开源项目,致力于提供可扩展的、易于使用的机器学习库,用于构建...
### Mahout in Action:全面解析 #### 一、概述 《Mahout in Action》是一本由Sean Owen、Robin Anil、Ted Dunning和Ellen Friedman合著的专业书籍,旨在深入介绍Apache Mahout这一强大的机器学习库。该书的网上...
【标题】:“Mahout在Windows下的单机安装教程” 【内容详解】 Apache Mahout是一个开源机器学习库,它提供了一系列的可扩展、分布式算法,涵盖了推荐系统、分类、聚类等多个机器学习领域。在Windows环境下安装...
Apache Mahout是一个开源机器学习库,它为大数据分析提供了丰富的算法和工具,旨在帮助开发者构建智能应用程序。在标题“Mahout-0.9-jar包”中,提及的是该库的一个特定版本——0.9,这通常意味着包含了该版本的所有...
Mahout是一个Apache Software Foundation(ASF)旗下的开源项目,主要用途是提供可扩展的机器学习算法的实现,帮助开发人员更方便快捷地创建智能应用程序。Mahout包含了很多算法的实现,包括聚类(Clustering)、...