首先简单说明下,mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile。SequenceFile是hadoop中的一个类,允许我们向文件中写入二进制的键值对,具体介绍请看eyjian写的http://www.hadoopor.com/viewthread.php?tid=144&highlight=sequencefile
       mahout中提供了一种将指定文件下的文件转换成sequenceFile的方式。(You may find Tika (http://lucene.apache.org/tika) helpful in converting binary documents to text.)
使用方法如下
$MAHOUT_HOME/bin/mahout seqdirectory \
--input <PARENT DIR WHERE DOCS ARE LOCATED> --output <OUTPUT DIRECTORY> \
<-c <CHARSET NAME OF THE INPUT DOCUMENTS> {UTF-8|cp1252|ascii...}> \
<-chunk <MAX SIZE OF EACH CHUNK in Megabytes> 64> \
<-prefix <PREFIX TO ADD TO THE DOCUMENT ID>>
举个例子:bin/mahout seqdirectory --input /hive/hadoopuser/ --output /mahout/seq/ --charset UTF-8

运行k-means例子

Kmeans算法思想也比较简单 :可见http://baike.baidu.com/view/3447609.htm
首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。

运行过程:参照官网https://cwiki.apache.org/confluence/display/MAHOUT/Clustering+of+synthetic+control+data的步骤,其中关于hadoop与mahout的配置启动之类的以前的文章都记录过,此处直接在mahout-0.4上运行例子过程(mahout-0.3运行时抛出异常,至今未解决,但mahout-0.4测试运行正常)

首先,下载数据集synthetic_control.data,在以上官网上的Input data set. Download it here点击可下载,并将其导入到分布式文件系统上,$HADOOP_HOME/bin/hadoop fs -mkdir testdata
              $HADOOP_HOME/bin/hadoop fs -put  /home/hadoop/synthetic_control.data testdata

其次,使用k-means算法,在mahout的安装目录下直接mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job或是$HADOOP_HOME/bin/hadoop jar /home/hadoop/mahout-distribution-0.4/mahout-examples-0.4-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job这里运行时间会长点,因为迭代,请耐心等待

最后,查看运行结果,如果在控制台直接显示结果:mahout vectordump --seqFile /user/hadoop/output/data/part-00000,或者依次运行命令:$HADOOP_HOME/bin/hadoop fs -lsr output  $HADOOP_HOME/bin/hadoop fs -get output $MAHOUT_HOME/examples(将结果从分布式文件系统上导下来),$cd MAHOUT_HOME/examples/output 看到以下结果,那么算法运行成功:canopies    clusters-1  clusters-3  clusters-5  clusters-7  points
clusters-0  clusters-2  clusters-4  clusters-6  data

好长一段时间都不知知道怎么查看kmeans的结果,例如想查看clusters-i中的 part-r-00000时,应该将其从分布式上导入到本地的txt格式(命令):./mahout seqdumper -i /user/hadoop /output/cluster-9/part-r-00000 -o /home/hadoop/out/part-0

其中n为某类的样本数目,c为各类各属性的中心,r为各类属性的半径。

mahout Kmeans聚类实现 :
(1)参数input指定待聚类的所有数据点,clusters指定初始聚类中心
如果指定参数k,由org.apache.mahout.clustering.kmeans.RandomSeedGenerator.buildRandom,通过org.apache.hadoop.fs直接从input指定文件中随机读取k个点放入clusters中
(2)根据原数据点和上一次迭代(或初始聚类)的聚类中心计算本次迭代的聚类中心,输出到clusters-N目录下。
该过程由org.apache.mahout.clustering.kmeans下的KMeansMapper\KMeansCombiner\KMeansReducer\KMeansDriver实现
KMeansMapper:在configure中初始化mapper时读入上一次迭代产生或初始聚类中心(每个mapper都读入所有的聚类中心);map方法对输入的每个点,计算距离其最近的类,并加入其中输出key为该点所属聚类ID,value为KMeansInfo实例,包含点的个数和各分量的累加和。KMeansCombiner:本地累加KMeansMapper输出的同一聚类ID下的点个数和各分量的和KMeansReducer:累加同一聚类ID下的点个数和各分量的和,求本次迭代的聚类中心;并根据输入Delta判断该聚类是否已收敛:上一次迭代聚类中心与本次迭代聚类中心距离<Delta;输出各聚类中心和其是否收敛标记。KMeansDriver:控制迭代过程直至超过最大迭代次数或所有聚类都已收敛,每轮迭代后,KMeansDriver读取其clusters-N目录下的所有聚类,若所有聚类已收敛,则整个Kmeans聚类过程收敛了。

bin/mahout kmeans \
    -i <input vectors directory> \
    -c <input clusters directory> \
    -o <output working directory> \
    -k <optional number of initial clusters to sample from input vectors> \
    -dm <DistanceMeasure> \
    -x <maximum number of iterations> \
    -cd <optional convergence delta. Default is 0.5> \
    -ow <overwrite output directory if present>
    -cl <run input vector clustering after computing Canopies>
    -xm <execution method: sequential or mapreduce>
注意: 当-k被指定的时候,-c目录下的所有聚类都将被重写,将从输入的数据向量中随机抽取-k个点作为初始聚类的中心。

参数调整 :mahout Kmeans聚类有两个重要参数:收敛Delta和最大迭代次数。个人觉得Delta值越小,表示收敛条件越高,因此最终收敛的聚类数可能会降低,而最大迭代次数可通过观察每次迭代后收敛聚类数决定,当收敛聚类数几乎不再变化或震荡时可停止迭代了

(转)mahout中k-means例子的运行的更多相关文章

  1. (二)Hadoop例子——运行example中的wordCount例子

    Hadoop例子——运行example中的wordCount例子 一.   需求说明 单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为 MapReduce版"Hello ...

  2. mahout中kmeans算法和Canopy算法实现原理

    本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...

  3. mahout中KMeans算法

    本博文主要内容有   1.kmeans算法简介 2.kmeans执行过程  3.关于查看mahout中聚类结果的一些注意事项 4.kmeans算法图解      5.mahout的kmeans算法实现 ...

  4. “独立”OpenVINO R2019_2 版本中的“super_resolution_demo”例子的,解决由于 R2019_1到R2019_2 升级造成的问题

    OpenVINO提供了丰富的例子,为了方便研究和使用,我们需要将这些例子由原始的demo目录中分离出来,也就是“独立”运行,这里我们选择了较为简单的super_resolution_demo来说明问题 ...

  5. 一、itk在VS2019上面的安装 和例子(HelloWorld)运行

    一.Itk简介 vtk是专门用于医疗图像处理的函数库,类似opencv. 这篇博客主要是讲解安装vtk之后的例子的运行,即如何构建自己的第一个ITK例子 二.Itk安装 Itk安装参考这篇博客: ht ...

  6. ActiveReports中如何在后台导出运行时绑定数据源报表

    ActiveReports支持运行时绑定数据源功能,这种绑定数据源方法使用较为普及,然而很多系统中都需要在后台导出报表文件,所以用户就很困惑,ActiveReports中如何在后台导出运行时绑定数据源 ...

  7. 在Eclipse中配置Tomcat 创建和运行Servlet/JSP

    在Eclipse中配置Tomcat 创建和运行Servlet/JSP 步骤一:在Eclipse中配置Tomcat(注意下载Eclipse IDE for Java EE Developers) (1) ...

  8. break在switch中的使用例子

    /* Name:break在switch中的使用例子 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月21日 03:16:52 Description:以 ...

  9. 如何在MyEclipse中配置jre的编译运行环境

    由于在MyEclipse中已经自带了jre编译环境,但由于版本太低,所以有时候需要将编译环境配置为系统的jre版本.在MyEclipse中配置jre的编译运行环境很简单,只需要全局配置一次,则所有项目 ...

随机推荐

  1. vhost.sh 源代码,认真看哦

    #!/bin/bash # # Web Server Install Script # Created by wdlinux QQ:12571192 # Url:http://www.wdlinux. ...

  2. 在选定的数据源上未找到名为“TitleSub”的字段或属

    在.NET开发过程中时常会遇到“在选定的数据源上未找到名为“TitleSub”的字段或属性”的错误”,导致这类错误的原因有很多,在我的项目中,详细情况是这样:1.有两个控件:DropDownList类 ...

  3. html 框架属性

    <html>    <head>        <title></title>    </head>    <frameset col ...

  4. sql 比较2个test字段的值

    可以用 CAST([TEXT字段]AS VARCHAR(MAX)),然后再比较

  5. sql server 的约束的作用 于 理解 [转]

    SQL Server中的约束用来确保系统的完整性.一般约束可以分为:主键约束外键约束检查约束默认约束唯一约束非空约束 但是一般我们需要特别注意前三种约束:主键约束,一就是说跟你系统的实体有很大的关系, ...

  6. js.map error

    1. 问题:      1.1 通过bower install 的components 许多在运行的时候报404无法找到js.map文件, 如图:          2. 分析:     2.1 查看 ...

  7. linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)

    最近在做一个dcos(数据中心操作系统)的东西,需要用marathon来做进程管理.遗憾的是0.6版本的marathon在API方面很是缺少,换成了0.15版本之后,运行时提示“Unsupported ...

  8. SEO策略与细节:细节决定成败

    昨天展开seo探讨会.听了一场医疗界seo大神的讲座.收益匪浅今天讲他的演讲内容整理出来与大家分享.希望对医疗界的seo带来些帮助.站长们一起成长! 一.首页 1.元标签设置 标题:上海癫痫病医院哪家 ...

  9. 关于glibc中的res_init()函数

    /* * Set up default settings.  If the configuration file exist, the values * there will have precede ...

  10. 初探JavaScript魅力(五)

    JS简易日历    innerHTML <title>无标题文档</title> <script> var neirong=['一','二','三','四','五' ...