`
thecloud
  • 浏览: 882889 次
文章分类
社区版块
存档分类
最新评论

mahout决策树之Partial Implementation源码分析 part2

 
阅读更多

决策树Partial Implementation源码的第二部分为:BuildForest,其源码所在位置为:MAHOUT_HOME/example/src/main/java/org/apache/mahout/classifier/df/mapreduce/BuildForest.java,现对其进行简要分析:

打开源码可以看到,BuildForest有如下四个步骤:

(1)创建一个DecisionTreeBuilder对象,并设置四个参数:

DecisionTreeBuilder treeBuilder = new DecisionTreeBuilder();
treeBuilder.setM(m);
treeBuilder.setComplemented(complemented);
treeBuilder.setMinSplitNum(minSplitNum);
treeBuilder.setMinVarianceProportion(minVarianceProportion)
(2)新建Builder接口,此处因为是并行参数(-p)所以使用PartialBuilder实现类:

Builder forestBuilder = new PartialBuilder(treeBuilder, dataPath, datasetPath, seed, getConf());
初始化的ParitalBuilder类的参数为:treeBuilder(DecisionTreeBuilder),这个参数只设置了四个参数,其他都未设置;

dataPath:输入训练数据的路径;datasetPath:对训练数据的描述文件的路径;seed:初始种子(暂时未深究);

getConf():各种配置参数(个人猜测);

(3)创建森林,设置树的个数:

DecisionForest forest = forestBuilder.build(nbTrees);
nbTrees表示要创建树的个数;

(4)把上面创建的森林写入HDFS:

DFUtils.storeWritable(getConf(), forestPath, forest);
上面四个步骤是BuildForest的四个主要操作,其他都是一些参数设置之类的辅助操作。对于上面四个步骤,其中第三歩,调用build方法最为复杂,现简要分析如下:

Builder是抽象类,定义了build非抽象方法,实现类PartialBuilder不用覆写此方法,而直接调用其父类(Builder)的build方法,Builder的build方法可分为如下几步:

<1>设置参数,包括seed,nbTrees,treeBuilder:

 setRandomSeed(conf, seed);
 setNbTrees(conf, nbTrees);
 setTreeBuilder(conf, treeBuilder);
<2>把训练数据的描述文件放入内存中(这样理解是否?个人理解就是类似全局变量的作用):

DistributedCache.addCacheFile(datasetPath.toUri(), conf);
<3>新建Job任务,名字为‘decision forest builder’:

Job job = new Job(conf, "decision forest builder");
<4>对新建的job进行配置:

configureJob(job);
<5>提交任务,等待结果:

runJob(job){
   return job.waitForCompletion(true);
}
<6>调用parseOutput方法得到森林(forest),删除输出文件,返回结果:

DecisionForest forest = parseOutput(job);
HadoopUtil.delete(conf, outputPath);
return forest;
这里为什么要删除outputPath呢?下面再说。

其中第<4>、<6>步在Builder中都是抽象方法,由其实现类进行覆写实现,在PartialBuilder中的configureJob()和parseOutput()如下:

cofigureJob():设置这个job的相关参数,Mapper为Step1Mapper,输出Key和Value类型分别为:TreeID、MapredOutput,输入文件为dataPath,输出文件为outputPath;

    FileInputFormat.setInputPaths(job, getDataPath());
    FileOutputFormat.setOutputPath(job, getOutputPath(conf));
   
    job.setOutputKeyClass(TreeID.class);
    job.setOutputValueClass(MapredOutput.class);
    
    job.setMapperClass(Step1Mapper.class);
这里输出文件的路径设置为outputPath,所以在上面第<6>步中要删除这个文件;

parseOutput():其操作如下:

    Node[] trees = new Node[numTrees];       
    processOutput(job, outputPath, keys, trees);
    return new DecisionForest(Arrays.asList(trees));
processOutput():操作如下:

for (Pair<TreeID,MapredOutput> record : new SequenceFileIterable<TreeID, MapredOutput>(path, conf)) {
     MapredOutput value = record.getSecond();
     if (trees != null) {
          trees[index] = value.getTree();
     }
     index++;
}
processOutput的操作也就是把输出文件的内容全部读入trees(Node[])中,然后以trees为参数建立一个DecisionForest返回;

DecisionForest返回过程如下:DecisionForest-->processOutput(PartialBuilder)-->parseOutput(PartialBuilder)-->build(PartialBuilder);

在build方法中的<3>、<4>、<5>步是整个BuilderForest的关键所在,所涉及到的类目前可以很明显的看到的有:TreeID(map输出Key类型)、MapredOutput(map输出Value类型)、Step1Mapper(job的Mapper操作);


<3><4><5>步下次再看。。


分享,快乐,成长


转载请注明出处:http://blog.csdn.net/fansy1990

分享到:
评论

相关推荐

    mahout Algorithms源码分析

    mahoutAlgorithms源码分析 mahout代码解析

    mahout-core-0.7-job.jar

    用于测试mahout中的决策树 ,即Partial Implementation用到的测试jar包。所谓的测试其实也只是把相应的数据可以打印出来,方便单机调试,理解算法实现原理而已。

    Mahout源码

    Mahout是一个Java的机器学习库。Mahout的完整源代码,基于maven,可以轻易导入工程中

    mahout源码

    mahout,朴素贝叶斯分类,中文分词,mahout,朴素贝叶斯分类,中文分词,

    Mahout_In_Action(源码)

    Mahout in Action 源码,结合Mahout in Action 学习数据挖掘,比较容易理解

    Mahout算法调用展示平台2.1-part2

    第二部分 功能主要包括四个方面:集群配置、集群算法监控、Hadoop模块、Mahout模块。 详情参考《Mahout算法调用展示平台2.1》

    mahout in action中的源码

    该资源是mahout in action 中的源码,适用于自学,可在github下载:https://github.com/tdunning/MiA

    Mahout算法调用展示平台2.1-part3

    第三部分 功能主要包括四个方面:集群配置、集群算法监控、Hadoop模块、Mahout模块。 详情参考《Mahout算法调用展示平台2.1》

    mahout0.9源码(支持hadoop2)

    mahout0.9的源码,支持hadoop2,需要自行使用mvn编译。mvn编译使用命令: mvn clean install -Dhadoop2 -Dhadoop.2.version=2.2.0 -DskipTests

    mahout-distribution-0.5-src.zip mahout 源码包

    mahout-distribution-0.5-src.zip mahout 源码包

    Apache.Mahout.Beyond.MapReduce.1523775785

    Apache Mahout: Beyond MapReduce. Distributed algorithm design This book is about designing mathematical and Machine Learning algorithms using the Apache Mahout "Samsara" platform. The material takes...

    svd mahout算法

    svd算法的工具类,直接调用出结果,调用及设置方式参考http://blog.csdn.net/fansy1990 &lt;mahout源码分析之DistributedLanczosSolver(七)&gt;

    mahout 0.7 src

    mahout 0.7 src, mahout 源码包, hadoop 机器学习子项目 mahout 源码包

    mahout-distribution-0.5.tar.gz + 源码

    mahout实战 源码 mahout实战 配套 mahout-distribution-0.5.tar.gz 版本

    MAHOUT源码包

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤...

    mahout api 学习资料

    mahout_help,mahout的java api帮助文档,可以帮你更轻松掌握mahout

    maven_mahout_template-mahout-0.8

    maven_mahout_template-mahout-0.8

    Mahout in Action

    PART 2 CLUSTERING .............................................................115 7 ■ Introduction to clustering 117 8 ■ Representing data 130 9 ■ Clustering algorithms in Mahout 145 10 ■ ...

    Apache Mahout Cookbook code

    Thank you for requesting the download for Apache Mahout Cookbook. Please click the following link to download the code:

Global site tag (gtag.js) - Google Analytics