mahout学习过程记录--seq2sparse流程
来源:互联网 发布:mac 软件安装路径 编辑:程序博客网 时间:2024/05/16 08:35
我用的mahout-0.6,对应的类为org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
光看名字应该知道,输入应该是SequenceFiles,文本文件会用seqdirectory命令处理成一行一个文本的形式。
在这个程序一开始,一大堆参数设置,命令行解析,这些可以先不管,第一个比较用用的程序行是:
DocumentProcessor.tokenizeDocuments(inputDir, analyzerClass, tokenizedPath, conf);
然后我们去看DocumentProcessor这个类,它是做什么的呢?这是一个mr程序,功能呢是将文章全部token,生成tokenized-documents文件下的内容,对于我这里来讲就是将中文分词,并且按照一定格式存入tokenized-documents文件夹。这里面的mapper即为SequenceFileTokenizerMapper,在这个里面你可以更改它所使用的对于字符串分词的方法。
接下来,我选择的是-wt tf,比较重要的是这么一行:
DictionaryVectorizer.createTermFrequencyVectors(tokenizedPath, outputDir, tfDirName, conf, minSupport, maxNGramSize, minLLRValue, norm, logNormalize, reduceTasks, chunkSize, sequentialAccessOutput, namedVectors);
这个名称很明显,创建tf-vectors。在这个函数中,主要完成字典生成,给词编号,统计词频。
之后是对idf的一些处理。没什么可说的。
这里来吐槽一下:假如我要做naive bayes的文本分类,是没办法直接用它这个类做向量转换的。
原因:1、首先,SparseVectorsFromSequenceFiles是将一个输入序列文件转换为一个文本向量。假设我们用的tf向量。在这个类中,他会得到这个文件中一个总的字典,字典对应到相应的词与其唯一的一个编号,后面无论是统计词频还是生成向量,都用到了这个字典。
2、其次,新来一批文章,对于他这个类并没有给出如何将已有的字典加载到内存中供新来的文章生成向量,也就是说,新来一个文章对于这个类来说处理方法是一样的,会生成另外一个字典,这个时候新生成的文本向量与之前训练出来的模型是没有办法做分类的。
3、想要解决这个问题,只能修改这个类的逻辑,去动态的加载已有的字典文件。
- mahout学习过程记录--seq2sparse流程
- mahout学习过程记录--seq2sparse中文分词
- mahout seq2sparse源文件解析
- mahout中决策森林学习记录
- 自动推荐(机器学习)流程--基于mahout
- mahout 学习
- mahout学习
- mahout配置流程
- 编写Mahout程序流程
- mahout学习过程中遇到java @Override问题
- 记录学习过程
- AXIS学习过程记录
- 学习c++过程记录
- 有关学习过程记录
- 记录Linux学习过程
- 记录学习过程
- 嵌入式学习过程记录
- word2vec学习过程记录
- Ubuntu下U盘变成只读,提示“只读文件系统”或“只读文件系统”的问题
- u-boot的配置过程
- Struts2 URL参数 s:if 判断应用
- EM(expection maxium)算法
- android用sharepreference保存输入框中的内容
- mahout学习过程记录--seq2sparse流程
- Linux下的透明代理技术
- struts2 实现原理解析
- Sub-process /usr/bin/dpkg returned an error code (1) Ubantu dpkg安装mysql-server-5.5软件包时报错解决办法
- SQLITE_SCHEMA 错误代表什么
- 用户空间和内科空间交互信息方法--> copy_to_user
- 为什么ROUND(9.95,1) 返回 9.9 而不是 10.0? 难道9.95 不该向上进位么
- 程序算法与人生选择
- 文件系统