mahout的默认分类指标
0.9版的分类统计如下图
0.10及0.11的分类统计如下
可以看到,相比较0.9版,新版的mahout增加了指标查准率(Weighted precision)和查全率(Weighted recall)。
修改mahout的分类指标
在此基础上,我们可以添加新的指标,比如最小查准率(Min precision ),最大查准率(Max precision),最小查全率(Min recall),最大查全率(Max recall)。以下是在mahout0.9中添加新指标的具体步骤。
因为我们安装mahout后,默认只有各种jar包,没有源码,所以首先下载mahout的源码–mahout-distribution-0.9-src.tar.gz,找到类“ConfusionMatrix”和“ResultAnalyzer”。之后在eclipse中新建工程,创建与上述类路径一致的包“org.apache.mahout.classifier”,并添加上述类和导入需要的包。
之后,对照mahout最新版本–mahout修改,为ConfusionMatrix添加函数getMinPrecision计算最小查准率。
// precisions最后一个总为0,所以只取前n-1个的最小值
public double getMinPrecision() {
double precision = 0.0;
double minPrecision = 100.0;
double[] precisions = new double[numLabels()];
int index = 0;
for (String label : labelMap.keySet()) {
precisions[index] = getPrecision(label);
index++;
}
int length = index;
for (index = 0; index < length-1 ; index++) {
precision = precisions[index];
if(precision < minPrecision)
minPrecision = precision;
}
return minPrecision;
}
在ResultAnalyzer中增加相应输出
returnString.append(StringUtils.rightPad("Min precision", 40)).append(
StringUtils.leftPad(decimalFormatter.format(confusionMatrix.getMinPrecision()), 10)).append('\n');
至此,源文件已修改完成,在eclipse中选中“Source->Clean up->Finish”进行编译。
在文件系统中找到mahout-examples-0.9-job.jar包,若为快速安装,则该包在安装目录下,若为CDH安装,则在类似于“/opt/cloudera/parcels/CDH-5.3.8-1.cdh5.3.8.p0.5/jars”的目录下。将包中的ConfusionMatrix.class和ResultAnalyzer.class用新编译的class替换掉即可。
我将自己修改后的包放在了优快云资源上–mahout-examples-0.9-job.jar(修改版。
修改效果
修改jar包后,重新运行,得到结果如下所示