Twenty Newsgroups Classification任务之二seq2sparse(5)
接上篇blog,继续分析。接下来要调用代码如下:
// Should document frequency features be processed
if (shouldPrune || processIdf) {
docFrequenciesFeatures = TFIDFConverter.calculateDF(new Path(outputDir, tfDirName),
outputDir, conf, chunkSize);
}
首先不看shouldPrune变量,单单看processIdf变量来说,这个变量肯定是true的,所以肯定要执行if里面的部分了,这个是计算DF的函数(单单就单词意思来说);
打开这个函数可以看到主要进行了两个操作:
startDFCounting(input, wordCountPath, baseConf);
return createDictionaryChunks(wordCountPath, output, baseConf, chunkSizeInMegabytes);
第一个是什么计数,第二个是产生一个dictionary 块;怎么感觉和前面的 Twenty Newsgroups Classification任务之二seq2sparse(2)一模一样,额,好吧,确实有很多相同的地方,应该说基本是一样的,可以参考前面的来分析;但是有点区别的地方是,首先计数的Job里面的Mapper,TermDocumentCountMapper有这样的一句:
private static final IntWritable TOTAL_COUNT = new IntWritable(-1);
while (it.hasNext()) {
Vector.Element e = it.next();
context.write(new IntWritable(e.index()), ONE);
}
context.write(TOTAL_COUNT, ONE);
可以看到在最后还写多了一句、这里先明确几个变量,全部的单词个数有93563个,一共的文件个数(或者说vector个数)有18846个;看这个job的详细信息:
这里就再次说明了reduce接受的key的个数比单词数多了一个即93564;
其次,在新建dictionary块的时候也有不同的地方,首先调用的类是TFIDFConverter。但是其操作基本一样,看到下面的代码:
if (key.get() >= 0) {
freqWriter.append(key, value);
} else if (key.get() == -1) {
vectorCount = value.get();
}
featureCount = Math.max(key.get(), featureCount);
}
featureCount++;
Long[] counts = {featureCount, vectorCount};
return new Pair<Long[], List<Path>>(counts, chunkPaths);
这里确实是有多一个key为-1的记录,然后featureCount应该是记录vector的key值,在++之前应该是18846,在++之后就是18847了,所以counts应该为[18847,93564];这个可以通过设置断点来查看;具体下次分析,还有下面两个Job其实应该是和seq2sparse(3)、(4)类似了,只是分析的数据的vector由单词转换为了数值,其他都一样,这样分析之后,后面两个Job就很简单了,然后就是最后的算法精髓了。然后就这个算法就分析完了吧(感觉看了好久的样子。。。)
分享,快乐,成长
转载请注明出处:http://blog.csdn.net/fansy1990
Twenty Newsgroups Classification任务之二seq2sparse(5)的更多相关文章
- Twenty Newsgroups Classification任务之二seq2sparse
seq2sparse对应于mahout中的org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles,从昨天跑的算法中的任务监控界面可以看到 ...
- Twenty Newsgroups Classification任务之二seq2sparse(3)
接上篇,如果想对上篇的问题进行测试其实可以简单的编写下面的代码: package mahout.fansy.test.bayes.write; import java.io.IOException; ...
- Twenty Newsgroups Classification任务之二seq2sparse(2)
接上篇,SequenceFileTokenizerMapper的输出文件在/home/mahout/mahout-work-mahout0/20news-vectors/tokenized-docum ...
- mahout 运行Twenty Newsgroups Classification实例
按照mahout官网https://cwiki.apache.org/confluence/display/MAHOUT/Twenty+Newsgroups的说法,我只用运行一条命令就可以完成这个算法 ...
- Twenty Newsgroups Classification实例任务之TrainNaiveBayesJob(一)
接着上篇blog,继续看log里面的信息如下: + echo 'Training Naive Bayes model' Training Naive Bayes model + ./bin/mahou ...
- 项目笔记《DeepLung:Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification》(二)(上)模型设计
我只讲讲检测部分的模型,后面两样性分类的试验我没有做,这篇论文采用了很多肺结节检测论文都采用的u-net结构,准确地说是具有DPN结构的3D版本的u-net,直接上图. DPN是颜水成老师团队的成果, ...
- 深度学习数据集Deep Learning Datasets
Datasets These datasets can be used for benchmarking deep learning algorithms: Symbolic Music Datase ...
- Open Data for Deep Learning
Open Data for Deep Learning Here you’ll find an organized list of interesting, high-quality datasets ...
- 深度学习课程笔记(二)Classification: Probility Generative Model
深度学习课程笔记(二)Classification: Probility Generative Model 2017.10.05 相关材料来自:http://speech.ee.ntu.edu.tw ...
随机推荐
- JSP 网页格式判定执行哪一块html
JSP 网页格式判定执行哪一块html <!-- start --> <td height="166" colspan="3&q ...
- POI读入excel文件到Java中
package Poi_Test; //导入java自带的包 import java.io.BufferedInputStream; import java.io.File; import java. ...
- Canvas上绘制几何图形
重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形,等各种形状 ...
- 一个问题:关于类型转换Type Cast(汇编讲解 as 语法)
问题如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
源代码:http://download.csdn.net/detail/nuptboyzhb/3961696 输入文字 l 对话框 1. 插入,资源,选择对话框资源 2. 编辑对话框如下: ...
- pygame编写贪吃蛇
一直想用pygame做一个小游戏的,可是因为拖延症的缘故一直没有动,结果那天看到了一个12岁的国际友人小盆友用pygame做的一款塔防游戏,突然感觉已经落后超级远了,所以心血来潮做小游戏了.高中陪伴我 ...
- WordPress的用户系统总结
原文发表自我的个人主页,欢迎大家訪问~转载请保留本段,或注明原文链接:http://www.hainter.com/wordpress-user-module keyword:WordPress,用户 ...
- Python中的继承
继承: 面向对象程序语言的一个重要特点是继承.继承提供了在已存在类的基础上创建新类的方法.继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法.继承是类的强有力的特点.一些 ...
- Opencv2系列学习笔记8(图像滤波)
一:概念: 滤波是信号处理机图像处理中的一个基本操作.滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样. 图像中的频域和空域:空间域指用图像的灰度值来描述一幅图像:而频域指用图像灰度值的变化来描 ...
- 在github 网页上,删除已经建好的库
在github 上面怎么删除已经建好的库 点击你要删除的库,然后找到Setting 找到如图所示的Delete 在输入框里面输入你要删除的库的名字 最后点击按钮,就可以删掉了