如何通过Weka Experiment API获取各分类的混淆矩阵
Weka实验模块获取分类混淆矩阵实现方法
你当前使用的实验示例代码默认仅配置了TP率、FP率这类聚合指标输出,没有开启混淆矩阵的统计与输出,按以下步骤调整即可拿到类别间的分类对应关系:
- 配置混淆矩阵统计项
在代码中初始化评估指标列表的位置(也就是你原有代码添加TP、FP率测量项的地方),导入weka.classifiers.evaluation.ConfusionMatrix类,将混淆矩阵加入测量项列表:// 原有代码添加其他指标的位置补充这行 measurements.add(new ConfusionMatrix()); - 提取并解析混淆矩阵
遍历实验结果拿到Evaluation类实例后,直接调用实例方法就能拿到原始混淆矩阵结构,配合数据集的类属性即可输出可读的类别对应关系:// 获取混淆矩阵:行对应真实类别,列对应预测类别 double[][] confusionMat = evaluation.confusionMatrix(); Attribute classAttribute = dataset.classAttribute(); // 打印可读的混淆矩阵 System.out.printf("%-20s", "真实\\预测"); for (int col = 0; col < classAttribute.numValues(); col++) { System.out.printf("%-15s", classAttribute.value(col)); } System.out.println(); for (int row = 0; row < confusionMat.length; row++) { System.out.printf("%-20s", classAttribute.value(row)); for (int col = 0; col < confusionMat[row].length; col++) { System.out.printf("%-15d", (int)confusionMat[row][col]); } System.out.println(); } - 多折/多轮实验的结果处理
如果你跑的是交叉验证、多次随机划分这类多轮实验,单轮返回的混淆矩阵仅对应当前划分的结果,需要把每轮矩阵同位置的数值累加,才能得到整体的混淆矩阵,不要直接取单轮结果作为全量实验的统计值。
如果你是用
Experiment类的批量任务模式跑实验,不需要手动遍历Evaluation对象,可以直接给结果生产者配置outputConfusionMatrix=true的属性,实验跑完后直接从结果表的对应字段读取混淆矩阵内容即可。
内容的提问来源于stack exchange,提问作者dododabird
相关产品推荐
相关产品推荐

