------mahout0.5
主要的内容:mahout中native bayes文本分类 源码分析和使用
mahout中训练过程包括4个Map/Reduce(job)阶段:
(1) BayesFeatureDriver
(2)BayesTfIdfDriver
(3) BayesWeightSummerDriver
(4)BayesThetaNormalizerDriver
接下来几节详细的介绍各个阶段主要完成的工作。
作用:计算词频(TF)
所在包: org.apache.mahout.classifier.bayes.mapreduce.common
输入格式: KeyValueTextInputFormat.class
输出格式: BayesFeatureOutputFormat.class
输出 key 类型: StringTuple.class
输出 value 类型: DoubleWritable.class
Map : BayesFeatureMapper.java
Map阶段 | key | value |
输入 | Map 是一次处理一行,每行的格式为: 类 别 +”\t”+ 单词 ( 单词之间用空格隔开 ) | |
输出 |
_WT,label,token | Ln(1.0+dKJ)/( ∑ dKJ2 )1/2 某个类中某个单词在一个文档中的 TF 值。 dKJ 是某个单词在某个文档中出现的次数。∑ dKJ2 是一个文档中所有单词出现次数平方和。 |
_DF,label,token | 1.0 | |
_FC,token | 1.0 | |
_LC,label | 1.0 |
Reduce : BayesFeatureReducer. java
相同的 key 放在一个 reduce 里执行合并, label 是类别属性, token 是单词。
Reduce 阶段 | key | value | 输出文档路径 |
输入 | 相同的 key 的 Map 阶段的输出 | ||
输出 | _WT,label,token | ∑ Ln(1.0+dKJ)/( ∑ dKJ2 )1/2 某类中某属性的 TF 值 |
$OUTPUT/ trainer-wordFreq |
_DF,label,token | 某类类中出现某个单词的文档数 | $OUTPUT/ trainer-termDocCount | |
_FC,token | 所有训练集出现某单词的文档数 | $OUTPUT/ trainer-featureCount | |
_LC,label | 某类下的文档数 | $OUTPUT/ trainer-docCount |
这个阶段的工作主要是求每个类中每个单词的 TFIdf 值,目的是为了降低高频词汇的重要性。
输入格式: SequenceFileInputFormat.class
输出格式: BayesTfIdfOutPutFormat.class
输出 key 类型: StringTuple.class
输出 value 类型: DoubleWritable.class
(1) Map 阶段: Map 的输出: label 是类别属性, token 是单词
输入路径: trainer-wordFreq 、 trainer-termDocCount 、 trainer-featureCount 文件
输出: trainer-tfIdf 文件
Map : BayesTfIdfMapper.class
Reduce : BayesTfIdfReducer.class
a. Map 阶段: Map 的输出: TF 是 trainer-wordFreq 文件中每个类每个属性的 TF 值。 Idf=N/DF, N 是指
某个类中包含的文档数目, DF 每个类中每个单词出现的次数。
Map阶段 | key | value |
输入 | $OUTPUT/ trainer-wordFreq、$OUTPUT/trainer-termDocCount、$OUTPUT/ trainer-featureCount文件
|
|
输出 |
_WT,label,token | TF |
_WT,label,token | Ln(idf) | |
_FS | 1.0 |
待续...