【0】README

本文使用 java 计算混淆矩阵,并利用 混淆矩阵值计算 分类指标;通用分类指标有: 查准率,查全率,查准率和查全率的调和均值F1值,正确率, AOC, AUC等;本文计算前4个指标;(附源代码和结果截图)

【1】什么是混淆矩阵(借用自己PPT截图)


【2】查准率和查全率的区别

查准率:查准率表示选出的样本中有多少比例样本是正例(期望样本);

查全率:查全率表示有多少比例的正样本(期望样本)被选出来了;

【3】如何计算多分类混淆矩阵的评价指标(摘自周志华老师的机器学习,极力推荐大家买一本)

【4】源码如下

// 计算混淆矩阵,并根据混淆矩阵计算 10次交叉验证下的 评估指标均值(精确度, 召回率, F值, 准确率 这4个指标)
public class SingleConfusionMatrix {
//  C:\Users\pacoson\Desktop\confusion_matrixprivate static String dir = "C:" + File.separator + "Users" + File.separator + "pacoson" + File.separator + "Desktop" + File.separator + "confusion_matrix";private static double[][][] averages = new double[10][3][4]; // 10次交叉验证, 3个unknown(12, 24, 48),4个度量指标(查全率,查准率,F1,准确率)private static int fold = 0;private static int counter = 6;public static void main(String[] args) {File file = new File(dir);showFiles();}// show files. public static void showFiles() {File[] files = new File(dir).listFiles();  for(File file: files) {  // 遍历 dir 目录下的所有文件String filename = file.getName(); String prefix = filename.split("_")[0]; if(prefix.length() > 1) continue;fold = Integer.valueOf(prefix); // 10次交叉验证的编号System.out.println("\n====== fold=" + fold + "======"); double[][] array = new double[100][6]; // item 数组DataRead reader = new DataRead(file.getAbsolutePath());   reader.readDataToArray(1, 1, array); // 数据读取完毕 computeConfusion(0, array); // 预测长度12
//          computeConfusion(1, array); // 预测长度24
//          computeConfusion(2, array); // 预测长度48break;}
//      computeAverage();}// column = 1(12), 2(24), 3(48)static void computeConfusion(int column, double[][] array) { // 1.计算confusion12/24/48: TP FN FP TNint[][] confusions = new int[6][4];counter = 6;for (int id = 0; id < 6; id++) {for (int i = 0; i < array.length; i++) {if(array[i][column] == id) {if(array[i][column+3] == id) // column = 1(12), 2(24), 3(48)confusions[id][0]++; // TPelseconfusions[id][1]++; // FN} else if(array[i][column] != id) {if(array[i][column+3] == id)confusions[id][2]++; // FPelseconfusions[id][3]++; // TN}}}// 2.计算 统计指标: // 精确度P=TP/(TP+FP), 查准率// 召回率R= TP/(TP+FN), 查全率// f1值=2*P*R/(P+R)// 准确率=(TP+TN)/(TP+FN+FP+TN)double[][] metrices = new double[6][4]; // 精确度, 召回率, F1值, 分类准确率for (int i = 0; i < confusions.length; i++) { double[] metric = metrices[i];int[] confusion = confusions[i];System.out.print("confusion matrix: TP, FN, FP, TN: ");for (int j = 0; j < confusion.length; j++) { // 打印每个混淆矩阵System.out.print(confusion[j] + ", ");}System.out.println();if(confusion[0] + confusion[2] != 0) // 分母不能为零.metric[0] =  (double)confusion[0] / (confusion[0] + confusion[2]); // 精确度if(confusion[0] + confusion[1] != 0) // 分母不能为零.metric[1] =  (double)confusion[0] / (confusion[0] + confusion[1]); // 召回率if(metric[0] + metric[1] != 0) // 分母不能为零.metric[2] =  (double)2*metric[0]*metric[1]/(metric[0] + metric[1]); // f值metric[3] =  (double)(confusion[0]+confusion[3]) / (confusion[0] + confusion[1]+ confusion[2]+ confusion[3]); // 准确率if(confusion[3] == 100) { // 如果 TN == 100, 表明没有这个类成员(TN表示真实类别不是该类别且预测类别也不是该类别,那如果总数为100,则没有模型没有选出该类别)。metric[3] = 0;counter--;}}// 3.求均值(宏精确度, 宏召回率, 宏F1值, 宏准确率)
//      double[] average = new double[4];
//      private static double[][][] averages = new double[10][3][4]; // 10次交叉验证, 3个unknown(12, 24, 48),4个度量指标(查全率,查准率,F1,准确率)
//      double[][] metrices = new double[6][4]; // 精确度, 召回率, F1值, 分类准确率double[] average = averages[fold][column];System.out.println("counter = " + counter);for (int j = 0; j < metrices[0].length; j++) {double sum = 0;for (int i = 0; i < metrices.length; i++) {sum += metrices[i][j];}average[j] = sum/counter;System.out.print(average[j] + " ");}System.out.println();}public static void computeAverage() {System.out.println("\n ===  计算10折交叉验证的统计指标均值  === \n");// 预测长度为 12(j==0), 24(j==1), 48(j==2)for (int j = 0; j < 3; j++) {             for (int k = 0; k < averages[0][0].length; k++) { // 4 个 itemsdouble sum = 0;for (int i = 0; i < averages.length; i++) { // 行(10折) sum += averages[i][j][k];}System.out.print(sum/10 + " ");}System.out.println();}}
} 

Tips: 10次交叉验证实验,只需要调用其中的 computeAverage() 方法 就可以计算 其10次的均值了。(这里只求出了某次交叉实验的均值)


java计算混淆矩阵(分类指标:查准率P,查全率R,P和R的调和均值F1,正确率A)相关推荐

  1. 分类模型计算混淆矩阵

    1. 什么是混淆矩阵 混淆矩阵是评判模型结果的一种指标,属于模型评估的一部分,常用于评判分类器的优劣.即,混淆矩阵是评判模型结果的指标,属于模型评估的一部分. 此外,混淆矩阵多用于判断分类器(Clas ...

  2. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB

    R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...

  3. R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...

  4. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

  5. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标

    R语言构建logistic回归模型并评估模型:计算混淆矩阵.并基于混淆矩阵计算Accuray.Precision.Recall(sensitivity).F1.Specificity指标 目录

  6. R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标

    R语言使用caret包的confusionMatrix函数计算混淆矩阵.基于混淆矩阵的信息手动编写函数计算accuray指标 目录

  7. R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算Specificity、特异度指标

    R语言使用caret包的confusionMatrix函数计算混淆矩阵.基于混淆矩阵的信息手动编写函数计算Specificity指标 目录

  8. [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数

    python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...

  9. 计算混淆矩阵和Kappa系数

    1.        将envi中影像转化为tif格式,导入到arcmap中,fileàsave file as àTiff/geo tiff 2.        在arcmap中用arctollbox ...

最新文章

  1. LeetCode Find Minimum in Rotated Sorted Array II
  2. k8s pod MySQL环境变量,配置 – 在Docker中相当于env-file的Kubernetes
  3. Android热修复技术原理详解(最新最全版本)
  4. restful java客户端_如何在Java客户端调用RESTful服务
  5. bash知识点:文件测试
  6. 6_机器翻译与Seq2Seq模型
  7. (转)OL记载Arcgis Server切片
  8. 硬件基础知识-- MOS管
  9. 1日元是多少人民币(2014年04月23日)
  10. 第 7 章 Neutron - 080 - 创建第一个 local network(I)
  11. C++单例模式--线程安全
  12. 简单的python的socket编程实例
  13. WAP网站浏览器(模拟器)大全
  14. 北京年内首现二手房连续三日成交破450套
  15. ETL工作经验分享(1)
  16. Chrome笔试平台 摄像头无法开启 | 摄像头图像黑屏 问题解决
  17. [分享]RFID之我的M1离线卡爆破过程
  18. 计算机专业surface pro,微软Surface Pro 7详细评测:仍旧是最好的二合一平板电脑
  19. 敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)
  20. 1万人游戏服务器多少钱?

热门文章

  1. [蓝桥杯2020国赛]游园安排
  2. Poj 1284 Primitive Roots
  3. 201612-5 卡牌游戏
  4. 【CF1179 A,B,C】Valeriy and Deque / Tolik and His Uncle / Serge and Dining Room
  5. 字符串:凯撒密码(洛谷P1914)
  6. YbtOJ-森林之和【dp】
  7. P3899-[湖南集训]谈笑风生【主席树】
  8. ssl2648-线段树练习5【线段树】
  9. Normal Data Structure Tricks
  10. 【网络流】植物大战僵尸(P2805)