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 ...
随机推荐
- Hough变换在opencv中的应用
霍夫曼变换(Hough Transform)的原理 霍夫曼变换是一种可以检测出某种特殊形状的算法,OpenCV中用霍夫曼变换来检测出图像中的直线.椭圆和其他几何图形.由它改进的算法,可以用来检测任何形 ...
- HDU 472 Hamming Distance (随机数)
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...
- CloudStack 4.2 新功能:集成SNMP进行系统监控(原理篇)
作者微博:http://weibo.com/tianchunfeng CloudStack 4.2 版本发布在即,相信不久后对 4.2 版本新功能(共有13个)的介绍会逐渐多起来.因为无论是从架构底层 ...
- 单选按钮、复选按钮——axure线框图部件库介绍
有时候发现这做事情坚持下来是一件很不容易的,写教程也一样,不过听到很多朋友对我说 这个全部是图片的教程 对他们入门帮助很多,我就想想 在坚持坚持把基础部分先完善了! 1. 简单的问卷调查: 您的性别? ...
- Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary lo
mysql> show slave status\G *************************** 1. row *************************** ...
- netduino第一步,环境配置
在netduino.com的官网介绍下,我很快就入门,现在的最新netduino的版本是4.3,但4.3是运行在win8下的,在codeplex.net上有,大部分人还使用的是win7,因此我现在采用 ...
- commondatastorage.googleapis.com訪问失败高速解决
谷歌更新以后非常多sampleproject下载不了. http://commondatastorage.googleapis.com訪问失败高速解决这个问题. 使用在线代理就可以,随便推荐一个htt ...
- crm使用FetchXml聚合查询
/* 创建者:菜刀居士的博客 * 创建日期:2014年07月08号 */ namespace Net.CRM.FetchXml { using System; using Micr ...
- mssql 返回表的创建语句
if OBJECT_ID('sp_create_table_sql','P') is not null drop proc sp_create_table_sql go create proc sp_ ...
- 用asio的定时器实现带超时的connect,备忘
// test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <boost/asio.hpp> #inclu ...