mahout源码分析之DistributedLanczosSolver(五)

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。

1. Job 篇

接上篇,分析到EigenVerificationJob的run方法:

public int run(Path corpusInput,
                 Path eigenInput,
                 Path output,
                 Path tempOut,
                 double maxError,
                 double minEigenValue,
                 boolean inMemory,
                 Configuration conf) throws IOException {
    this.outPath = output;
    this.tmpOut = tempOut;
    this.maxError = maxError;
    this.minEigenValue = minEigenValue;  

    if (eigenInput != null && eigensToVerify == null) {
      prepareEigens(conf, eigenInput, inMemory);
    }
    DistributedRowMatrix c = new DistributedRowMatrix(corpusInput, tempOut, 1, 1);
    c.setConf(conf);
    corpus = c;  

    // set up eigenverifier and orthoverifier TODO: allow multithreaded execution  

    eigenVerifier = new SimpleEigenVerifier();  

    // we don't currently verify orthonormality here.
    // VectorIterable pairwiseInnerProducts = computePairwiseInnerProducts();  

    Map<MatrixSlice, EigenStatus> eigenMetaData = verifyEigens();  

    List<Map.Entry<MatrixSlice, EigenStatus>> prunedEigenMeta = pruneEigens(eigenMetaData);  

    saveCleanEigens(new Configuration(), prunedEigenMeta);
    return 0;
  }

这里先明确几个输入参数,inputPath、outputPath、tempPath就不用多说了,eigenPath就是上篇最后生成的rawEigenvectors文件;inMemory是false、maxError是0.05,minEigenValue是0.0;顺便说一下,如果直接运行这个类是不行的,比如像下面这样调用:

package mahout.fansy.svd;  

import java.io.IOException;  

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.mahout.math.hadoop.decomposer.EigenVerificationJob;  

public class RunEigenVerificationJob {  

    /**
     * 调用EigenVerificationJob
     */
    private static Path prefix=new Path("hdfs://ubuntu:9000");
    public static void main(String[] args) throws IOException {
        Path inputPath=new Path(prefix,"/svd/input/wine");
        Path rawEigenVectorPath=new Path(prefix,"/svd/output1/rawEigenvectors");
        Path outputPath=new Path(prefix,"/svd/output1/cleanEigenvectors");
        Path outputTmpPath=new Path(prefix,"/svd/temp");
        double maxError=0.5;  

        double minEigenvalue=0.0;
        boolean inMemory=false;
        Configuration conf=new Configuration();
        conf.set("mapred.job.tracker", "ubuntu:9001");
        int result=new EigenVerificationJob().run(inputPath,
                rawEigenVectorPath,
                outputPath,
                outputTmpPath,
                maxError,
                minEigenvalue,
                inMemory,
                conf);
        System.out.println("result success?"+(result==0?true:false));
    }  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mahout
, path
, conf
, new
, configuration
, inmemory
, SVD
ioException
mahout源码分析、mahout源码、mahout源码下载、mahout kmeans源码、mahout实践指南 源码,以便于您获取更多的相关知识。

时间: 2016-08-29

mahout源码分析之DistributedLanczosSolver(五)的相关文章

mahout源码分析之DistributedLanczosSolver(七) 总结篇

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 看svd算法官网上面使用的是亚马逊的云平台计算的,不过给出了svd算法的调用方式,当算出了eigenVectors后,应该怎么做呢?比如原始数据是600*60(600行,60列)的数据,计算得到的eigenVectors是24*60(其中的24是不大于rank的一个值),那么最后得到的结果应该是original_data乘以eigenVectors的转置这样就会得到一个600*24的矩阵,这样就达到了

mahout源码分析之DistributedLanczosSolver(二) Job1

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 在上篇blog中的最后终端的信息可以看到,svd算法一共有5个Job任务.下面通过Mahout中DistributedLanczosSolver源代码来一个个分析: 为了方便后面的数据随时对照,使用wine.dat修改后的数据,如下(5行,13列): 14.23,1.71,2.43,15.6,127,2.8,3.06,0.28,2.29,5.64,1.04,3.92,1065 13.2,1.78,2.

mahout源码分析之DistributedLanczosSolver(六) 完结篇

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 接上篇,分析完3个Job后得到继续往下:其实就剩下两个函数了: List<Map.Entry<MatrixSlice, EigenStatus>> prunedEigenMeta = pruneEigens(eigenMetaData); saveCleanEigens(new Configuration(), prunedEigenMeta); 看pruneEigens函数: priv

mahout源码分析之DistributedLanczosSolver(四)rawEigen简介

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 接上篇,eigen分解,额,太复杂了,人太浮躁了,静不下来分析(说java对矩阵操作支持度不足,额,好吧是外部原因). 1. 前奏: eigen分解的是triDiag矩阵,这个矩阵,上篇求得的结果是: [[0.315642761491587, 0.9488780991876485, 0.0], [0.9488780991876485, 2.855117440373572, 0.0], [0.0, 0.

mahout源码分析之DistributedLanczosSolver(三) Job2

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 1. 前奏: 本篇接着上篇继续分析,分析LanczosSolver中的:Vector nextVector = isSymmetric ? corpus.times(currentVector) : corpus.timesSquared(currentVector);之后.前篇说到这个是建立了一个job任务,并且按照一定的算法求得了一个nextVector,那么接下来是? if (state.get

mahout源码分析之DistributedLanczosSolver(一) 实战

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇开始系列svd,即降维.这个在mahout中可以直接运行MAHOUT_HOME/mahout/svd -h 即可看到该算法的调用参数,或者在官网相应页面也可以看到,本次实战使用的svd的调用参数如下: package mahout.fansy.svd; import org.apache.mahout.math.hadoop.decomposer.DistributedLanczosSolver;

Jquery1.9.1源码分析系列(十五)动画处理之外篇_jquery

a.动画兼容Tween.propHooks Tween.propHooks提供特殊情况下设置.获取css特征值的方法,结构如下 Tween.propHooks = { _default: { get: function(){...}, set: function(){...} }, scrollTop: { set: function(){...} } scrollLeft: { set: function(){...} } } Tween.propHooks.scrollTop 和Tween.

jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween_jquery

在jQuery内部函数Animation中调用到了createTweens()来创建缓动动画组,创建完成后的结果为: 可以看到上面的缓动动画组有四个原子动画组成.每一个原子动画的信息都包含在里面了. 仔细查看createTweens函数,实际上就是遍历调用了tweeners ["*"]的数组中的函数(实际上就只有一个元素). function createTweens( animation, props ) { jQuery.each( props, function( prop, v

jQuery 1.9.1源码分析系列(十五)之动画处理_jquery

首先需要有队列(queue)的基本知识.见上一章. 相关教程:jQuery下的动画处理总结: http://www.jb51.net/article/42000.htm jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween  :http://www.jb51.net/article/75821.htm a.动画入口jQuery.fn.animate函数执行流程详解 ------------------------------------------------------