
源码分析
文章平均质量分 90
fansy1990
这个作者很懒,什么都没留下…
展开
-
Mahout随机森林算法源码分析(3)--TestForest
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。首先贴上调用TestForest的代码(win7下面myeclipse调用TestForest,这里要设置Configuration,所以不能直接TestForest.main()来调用):package mahout.fansy.partial.test;import org.apach原创 2013-09-25 00:47:29 · 6085 阅读 · 22 评论 -
Mahout随机森林算法源码分析(1)--Describe
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。Mahout中实现决策树算法的有两个(quick start),分别是Partial Implementation和Breiman Example,可以点击链接到相应的网页查看其官方实例。其中Breiman Example是单机版的,而Partial Implementation是可以使用ma原创 2013-09-20 15:44:50 · 6162 阅读 · 15 评论 -
Mahout贝叶斯算法源码分析(7)
首先更正下seq2sparse(6)之TFIDFPartialVectorReducer源码分析中最后的公式应该是如下的形式:sqrt(e.get())*[ln(vectorCount/(df+1)) + 1]前面说到e.get(),当时想当然的就以为是获取单词的计数了,其实这里获得的值是1而已,而且那个log函数是以e为底的,所以要改为ln;seq2sparse(7)中的PartialV原创 2013-09-05 21:11:36 · 2997 阅读 · 0 评论 -
Mahout贝叶斯算法源码分析(6)
首先更正前篇博客中的错误的地方,看图即可看出来:原创 2013-09-04 01:12:59 · 3048 阅读 · 0 评论 -
Mahout贝叶斯算法源码分析(5)
接上篇blog,继续分析。接下来要调用代码如下:// Should document frequency features be processed if (shouldPrune || processIdf) { docFrequenciesFeatures = TFIDFConverter.calculateDF(new Path(outputDir, tf原创 2013-09-03 19:57:39 · 2264 阅读 · 0 评论 -
Mahout贝叶斯算法源码分析(2-1)
seq2sparse对应于mahout中的org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles,从昨天跑的算法中的任务监控界面可以看到这一步包含了7个Job信息,分别是:(1)DocumentTokenizer(2)WordCount(3)MakePartialVectors(4)MergePartialVectors(5)Vect原创 2013-08-29 01:42:49 · 3894 阅读 · 3 评论 -
Mahout贝叶斯算法源码分析(1)
继前篇mahout 中Twenty Newsgroups Classification运行实例,本篇主要分析该算法的各个任务,首先是第一个任务,即seqdirectory,在提示信息里面的内容如下:+ ./bin/mahout seqdirectory -i /home/mahout/mahout-work-mahout/20news-all -o /home/mahout/mahout-wo原创 2013-08-28 00:15:51 · 4301 阅读 · 2 评论 -
mahout源码K均值算法分析(6)
接上文重点分析map操作: Vector probabilities = classifier.classify(value.get());// 第一行 Vector selections = policy.select(probabilities); // 第二行 for (Iterator it = selections.iterateNonZero(); it原创 2013-08-07 01:36:02 · 2410 阅读 · 0 评论 -
Mahout源码canopy聚类算法分析(2)
首先更正一点,前篇博客里面说到一个Canopy的测试的例子里面有这样的一句代码:buildClusters(Configuration conf, Path input, Path output, DistanceMeasure measure, double t1, double t2, double t3, double t4, int clusterFilter,原创 2013-07-22 22:24:22 · 3183 阅读 · 2 评论 -
Mahout关联规则算法源码分析(2)
上次说到这个函数:public final void generateTopKFrequentPatterns(Iterator,Long>> transactionStream, Collection> frequencyList,原创 2013-02-07 15:44:46 · 3040 阅读 · 0 评论 -
Mahout关联规则算法源码分析(1)
首先说明一点,前面的文章中的mahout关联规则源码分析part2 很多地方都理解错误了,现重新把理解的写下:在命令行直接运行下面的命令就可以获得mahout关联规则FPGrowthDriver的用法: bin/hadoop jar $mahout_home/core/target/mahout-core-0.7-job.jar org.apache.mahout.fpm.pfpgr原创 2013-02-02 00:49:27 · 3943 阅读 · 6 评论 -
Mahout决策树算法源码分析(1)
昨天决策树Partial Implementation实战演示了三个部分:1、Describe ;2、BuildForest;3、TestForest;今天主要分析下Describe的源码,看下这个类做了什么事情。打开Describe的源码可以看到这个类主要可以分为三个部分,如下:(1)生成描述:String descriptor = DescriptorUtils.gener原创 2012-12-27 14:35:04 · 4141 阅读 · 2 评论 -
Mahout基于项目的协同过滤算法源码分析(2)--RowSimilarityJob
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。本篇开始之前先来验证前篇blog的分析结果,编写下面的测试文件来进行对上篇三个job的输出进行读取:package mahout.fansy.item;import java.io.IOException;import java.util.Map;import org.apache.原创 2013-10-12 00:55:06 · 4470 阅读 · 2 评论 -
Mahout随机森林算法源码分析(2)--BuildForest
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。BuildForecast是在mahout-examples-0.7-job.jar包的org\apache\mahout\classifier\df\mapreduce 路径下。直接运行该类,可以看到该类的使用方式:Usage:原创 2013-09-21 23:56:30 · 5270 阅读 · 16 评论 -
Mahout协同过滤算法源码分析(3-2)--QR分解数据流
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇,当数据准备完成后,就可以来分析其数据流了。首先要分析的是new QRDecomposition(Ai),这个初始化QRDecomposition就做了好多的事情,具体分析如下:先贴上源码,然后再分析:public QRDecomposition(Matrix a) {原创 2013-10-06 18:32:02 · 2885 阅读 · 0 评论 -
Mahout协同过滤算法源码分析(4)--评价和推荐
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。首先来总结一下 mahout算法源码分析之Collaborative Filtering with ALS-WR (三),这个写了三篇,基本都是写QR分解,然后矩阵进过处理得到U或者M的过程,但是还是没有讲出个所以然来。mahout官网上说其是根据这篇文献得来的Large-scale Parall原创 2013-10-08 19:42:28 · 4206 阅读 · 1 评论 -
Mahout基于项目的协同过滤算法源码分析(5)--推荐
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇,本篇分析该算法的最后一个job。在上篇计算共生矩阵的乘积后,接下来又到了一个shouldRunNextPhase的方法了,这个方法里面含有三个prepareJob,但是本次只分析一个,为啥?因为在实战中没有设置filterFile,这里其实是可以设置filterFile的,设置这个参数的作原创 2013-10-17 00:17:07 · 4672 阅读 · 5 评论 -
Mahout基于项目的协同过滤算法源码分析(4)共生矩阵乘法
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。经过了SimilarityJob的计算共生矩阵后,就可以开始下面一个过程了,这个过程主要是共生矩阵的乘法,要说这个共生矩阵的乘法是啥意思?我也不是很清楚,不清楚就看代码呗。首先明确共生矩阵,即共生矩阵的输入文件(也是上面个SimilarityJob的输出文件):similarityMa原创 2013-10-15 20:38:35 · 3783 阅读 · 3 评论 -
Mahout协同过滤算法源码分析(3-1)--QR分解数据流
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇,本篇主要分析下面的一行代码:Vector solve(Matrix Ai, Matrix Vi) { return new QRDecomposition(Ai).solve(Vi).viewColumn(0); }虽说是一行代码,但是里面涉及的内容却好多。。。哎,当初原创 2013-10-06 18:08:16 · 4234 阅读 · 0 评论 -
Mahout随机森林算法源码分析(2-1)BuildForest
尼玛,好坑呀!昨天遇到的问题原来是找错包了,那个Step1Mapper.class 同时在mahout-core-0.7.jar mahout-core-0.7-job.jar mahout-examples-0.7-job.jar 三个包中,但是用到的只是mahout-core-0.7.jar中的Step1Mapper.class,所以只用替换mahout-core-0.7.jar原创 2013-09-22 22:25:20 · 3656 阅读 · 1 评论 -
Mahout贝叶斯算法源码分析(2-3)
接上篇,如果想对上篇的问题进行测试其实可以简单的编写下面的代码:package mahout.fansy.test.bayes.write;import java.io.IOException;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.F原创 2013-08-30 00:49:35 · 2779 阅读 · 0 评论 -
Mahout源码MeanShiftCanopy聚类算法分析(3-1)
首先贴上MeanShiftCanopyReducer的仿造代码,如下:package mahout.fansy.meanshift;import java.io.IOException;import java.util.Collection;import java.util.HashMap;import java.util.Map;import org.apache.hadoop原创 2013-08-25 01:17:08 · 2388 阅读 · 0 评论 -
mahout源码K均值聚类算法分析(7)
好吧,我上篇博客的仿造CIReducer的代码的确是有误的,错在哪?map输出的中心点是两个不错,但是其key是不一样的,所以要送到不同的reduce函数中(注意这里是函数,而非reducer,如果是同一个key则要送到同一个reduce中),所以不是一个for循环就搞定的,应该要key的个数个for循环才行。那就是说reducer中的reduce函数一次只能接受一个中心点了(针对一直使用的数据来原创 2013-08-08 20:55:41 · 2673 阅读 · 2 评论 -
Mahout源码K均值聚类算分析(2)
首先说下,为什么题目后面会有个“无语篇”,因为我觉得今晚这几个钟头太坑爹了。为什么,且听我慢慢道来:按照昨天的计划,我应该把代码仿造成单机可运行的代码。但是首先我要有输入数据不是?所以我最开始做的就是仿造clusterIn的数据,即中心向量的文件。昨天也说过中心向量文件应该就是把一组(key,value)对(要求value的格式为ClusterWritable,key格式任意)写入一个序列文件原创 2013-08-02 01:53:55 · 4313 阅读 · 1 评论 -
Mahout源码K均值聚类算法分析(1)
今天开始分析KMeansDriver的源码,由于之前已经分析过KMeans算法的原理(其实是已经使用hadoop实现过了),所以在这里就讲原理了,而且大家对这个算法的原理基本都清楚(搞数据挖掘的最清楚的应该就算这个算法了吧)。今天要分析的内容其实可以暂时完全不使用hadoop集群,即可以暂时不用开vmware了。额,废话讲了这么多,开始分析吧。首先把下面的代码复制到java工程(这个工程是在讲原创 2013-07-31 20:39:16 · 4336 阅读 · 3 评论 -
Mahout决策树算法源码分析(3)
part3主要分析下名为“decision forest builder”的Job的操作,上篇说到这个Job只有Mapper,所以也就是针对这个Mapper,即Step1Mapper类的分析:Step1Mapper.java在org.apache.mahout.classifier.df.mapreduce.partial中,打开这个源文件,可以看到其操作主要有以下三点:1. setup(原创 2013-01-26 14:06:27 · 3355 阅读 · 7 评论 -
Mahout基于项目的协同过滤算法源码分析(6)--总结
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。本篇是ItemBased Collaborative Filtering的算法综述,即总结前面几篇blog,分析该算法的数据流,主要使用的数据是《mahout in action》中的listing2.1的数据。首先贴上下面的一个图:看到上面的图片(这个算法计算到上图中的矩阵还没有结束原创 2013-10-18 00:07:04 · 3060 阅读 · 1 评论 -
Mahout协同过滤算法源码分析(5)--拓展篇
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。额,好吧,心头的一块石头总算是放下了。关于Collaborative Filtering with ALS-WR这个算法中的那个QR分析,真心是太复杂了。以至于国庆后面三天基本都是在郁闷中过来的,想着自己的矩阵学的是有多差呀。。。后来算法验证弄懂之后才发觉,尼玛,java太坑爹了吧,矩阵求个逆,有那么原创 2013-10-08 20:03:18 · 4081 阅读 · 2 评论 -
Mahout基于项目的协同过滤算法源码分析(1)--PreparePreferenceMatrixJob
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。本篇分析RecommenderJob的源码,这个类也是继承了AbstractJob,所以也会覆写其run方法,点开这个run方法,可以看到和其他的job类都一样,刚开始都是基本参数的默认值设置和获取;然后到了第一个job,在这个job之前有一个shouldRunNextPhase()函数,点开这个函数原创 2013-10-11 01:19:39 · 5087 阅读 · 0 评论 -
Mahout协同过滤算法源码分析(3-3)QR分解数据流
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇分析完new QRDecomposition(Ai)后,此篇分析new QRDecomposition(Ai).solve(Vi).viewColumn(0)的后面solve函数。首先来明确几个变量:Vi:[[34.8125],[5.235105578655231],[4原创 2013-10-06 18:44:08 · 2839 阅读 · 1 评论 -
Mahout协同过滤算法源码分析(3)--parallelALS
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇,此篇分析parallelALS的initializeM函数和for循环(for循环里面含有一个QR分解,此篇只分析到这里为止)。parallelALS的源码对应为:org.apache.mahout.cf.taste.hadoop.als.ParallelALSFactorizationJob原创 2013-10-05 17:48:12 · 4679 阅读 · 0 评论 -
Mahout随机森林算法源码分析(2-4)
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。接上篇,先来说说上篇最后的bestIg和bestIndex的求法。在说这个前,要首先明确一个数组的熵的求法,按照mahout中的源码针对这样的一个数组a=[1,3,7,3,0,2]其熵为:设sum=1+3+7+3+0+2,则其中pi对应于1/sum、3/sum、7/sum、3/sum、2/su原创 2013-09-24 12:37:57 · 2757 阅读 · 0 评论 -
Mahout随机森林算法源码分析(2-2)
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。今天到BuildForest的主要Mapper操作,前面也说到BuildForest主要的操作都在Mapper里面,而reducer是没有的。本篇介绍其Mapper,Step1Mapper。首先贴上其仿制代码,如下:package mahout.fansy.partial;import j原创 2013-09-23 21:24:19 · 3242 阅读 · 3 评论 -
Mahout贝叶斯算法源码分析(8)
接着上篇blog,继续看log里面的信息如下:+ echo 'Training Naive Bayes model'Training Naive Bayes model+ ./bin/mahout trainnb -i /home/mahout/mahout-work-mahout/20news-train-vectors -el -o /home/mahout/mahout-work-m原创 2013-09-06 01:23:07 · 3932 阅读 · 1 评论 -
Mahout贝叶斯算法源码分析(4)
继前篇blogseq2sparse(3)之TFParitialVectorReducer源码分析 之后,继续分析下面的代码,本次分析的是PartialVectorMergeReducer的源码,这个reducer是下面的函数调用的:PartialVectorMerger.mergePartialVectors(partialVectorPaths, outputDir, conf, normP原创 2013-09-03 00:04:04 · 2757 阅读 · 0 评论 -
Mahout贝叶斯算法源码分析(3)
接着上篇seq2sparse系列,本次主要分析TFParitialVectorReducer的源码。打开该类文件,首先分析逻辑流。TFParitialVectorReducer有两个函数分别是setup和reduce,setup函数,主要是读取基本的参数设置,然后就是读取一个相对来说比较重要的变量(从文件中读取),如下代码:// key is word value is id fo原创 2013-09-02 19:47:46 · 2935 阅读 · 0 评论 -
Mahout源码MeanShiftCanopy聚类算法分析(3)
继上篇博客,分析MeanShiftCanopyMapperFollow:首先要获得数据,MeanShiftCanopyMapperFollow的getMapData函数是改编自KMeansDriver中的一段代码,主要是读取序列文件的Value值,把这些Value值返回一个变量,其中涉及到强制转型,这里转型的代码改编一下就可以适应来读取不同的序列文件的value值了。因为使用的是synth原创 2013-08-24 19:34:22 · 2348 阅读 · 0 评论 -
Mahout源码MeanShiftCanopy聚类算法分析(2)
首先更正一点,昨天处理数据的时候是有问题的,直接从网页中拷贝的文件的空格是有问题的,直接拷贝然后新建的文件中的空格可能有一个两个、三个的,所以要把两个或者三个的都换为一个,在InputMapper中下面的代码:private static final Pattern SPACE = Pattern.compile(" ");String[] numbers = SPACE.split(val原创 2013-08-23 01:32:40 · 2427 阅读 · 1 评论 -
Mahout源码K均值聚类算法分析(5)
接着上篇,继续分析代码。下面就到了MR的循环了,这里MR应该算是比较好理解的,重点是退出循环的条件设置,即如何判断前后两次中心点误差小于给定阈值。首先,while循环: while (iteration <= numIterations) { conf.set(PRIOR_PATH_KEY, priorPath.toString()); String原创 2013-08-06 00:30:53 · 3037 阅读 · 0 评论 -
Mahout源码K均值聚类算法分析(3)
之前的关于中心点文件的分析基本是对的,但是在第一篇整体分析的时候没有说如何产生中心点向量文件所以在第二篇写了如何得到,其实在mahout里面有一个自动生成中心点文件的方法,之前漏掉了。现在补上,首先编写下面的debug代码:package mahout.fansy.test.kmeans;import java.io.IOException;import org.apache.hadoop原创 2013-08-05 00:08:46 · 3341 阅读 · 0 评论