文章目录

  • 评价指标1
    • 例子
  • 评价指标2
    • 例子
  • 混淆矩阵
  • F1score
  • ROC曲线
    • 例子
  • AUC值
  • 代码计算

评价指标1

以下四个可以这样理解,第一个字母代表你预测的对错T/F,第二个字母代表你预测的是正还是负P/N。例如TP=你预测的是正的,且预测对了。
真正例/真阳性(TP):预测为正,实际为正,预测对了。
真负例/真阴性(TN):预测为负,实际为负,预测对了。
假正例/假阳性(FP):预测为正,实际为负,预测错了。
假负例/假阴性(FN):预测为负,实际为正,预测错了。

所谓正负指的是,对某一类,你认为它是这一类或不是,也就是说每一类都需要计算一遍这四个指标。

例子

比如三类问题
你预测的:

1 2 3 1 2 3 1 2 3 1

实际分类:

1 1 2 2 2 3 3 3 3 3

对于1类:
TP = 1, TN = 5, FP = 3, FN = 1
对于其它两类同理

评价指标2

准确率(accuracy):(TP + TN) / (TP + TN + FP + FN),分母就是你预测的全部数据P’+N’
精准率(precision):TP / (TP + FP),分母就是你预测的全部正数据P’
召回率(recall):TP / P,真实数据中全部正数据

其中P’和N’表示你预测的正负类,P和N表示真实正负类。往往预测数据与真实数据数量相等,P’和P不需要区分,但如果预测数量与真实数量不等,则需要区分。

例子

接着上面的例子:
总的准确率:
accuracy = 4 / 10 = 0.4
对于1类:
precision = 1 / (1 + 3) = 0.25
recall = 1 / 2 = 0.5
其余两类同理

混淆矩阵

就是把上面几个值组合一下显示到矩阵中

真实\预测 合计
TP FN P
FP TN N
合计 P’ N’ P+N

一般多类问题的混淆矩阵不用上述正负,而是计算每个类别的值,用上面例子给出

真实\预测 1类 2类 3类
1类 1 1 0
2类 1 1 1
3类 2 1 2

F1score

F = (2 * precision * recall) / (precision + recall)

ROC曲线

接收者操作特征(Receiver Operating Characteristic, ROC)是比较两个分类模型的可视化工具。计算方式:
TPR = TP / P
FPR = FP / N
你预测的不是分类而是正样本的概率,把这个概率从大到小排序,把每个概率作为一个阈值(大于阈值看为正样本,小于阈值看为负样本),这样每一个阈值都能对应得到一组TPR和FPR(存在概率相等的,只算作一个阈值),把FPR做横轴TPR做纵轴,就能画出一条锯齿型的曲线,可以用一些方法来拟合这条曲线,就是ROC曲线。

例子

预测的数据

0.1 0.5 0.8 0.7 0.4 0.1 0.3 0.5 0.4 0.2

真实的数据

0 1 1 1 0 0 1 0 0 1

排序

真实 预测 TP FP TN FN TPR FPR
1 0.8 1 0 5 4 0.2 0
1 0.7 2 0 5 3 0.4 0
1 0.5 3 1 4 2 0.6 0.2
0 0.5 3 1 4 2 0.6 0.2
0 0.4 3 3 2 2 0.6 0.6
0 0.4 3 3 2 2 0.6 0.6
1 0.3 4 3 2 1 0.8 0.6
1 0.2 5 3 2 0 1 0.6
0 0.1 5 5 0 0 1 1
0 0.1 5 5 0 0 1 1

x = [0 0 0.2 0.6 0.6 0.6 1 1]
y = [0.2 0.4 0.6 0.6 0.8 1 1]
thresholds = [0.8 0.7 0.5 0.4 0.3 0.2 0.1]
用这个x y就可以画ROC曲线

AUC值

ROC曲线下面的面积

代码计算

python的sklearn.metrics包提供了充足的评价指标计算方法

数据准备:

import numpy as np
from sklearn import metrics pred_prob = [0.1, 0.5, 0.8, 0.7, 0.4, 0.1, 0.3, 0.5, 0.4, 0.2] # 预测二分类的概率
real_prob = [0, 1, 1, 1, 0, 0, 1, 0, 0, 1] # 真实二分类
pred_bin = [0, 1, 1, 0, 0, 1, 1, 1, 0, 1] # 预测二分类
pred = [1,2,3,1,2,3,1,2,3,1] # 预测多分类
real = [1,1,2,2,2,3,3,3,3,3] # 真实多分类

准确率、召回率、精准率、F1值

accuracy1 = metrics.accuracy_score(real, pred) # 多分类,返回准确率
accuracy2 = metrics.accuracy_score(real, pred, normalize=False) # 多分类,返回正确分类的数量
accuracy3 = metrics.accuracy_score(real_prob, pred_bin) # 二分类
recall1 = metrics.recall_score(real, pred, labels=[1,2,3], average=None) # 多分类召回率,返回每个分类的召回率
recall2 = metrics.recall_score(real, pred, labels=[1,2,3], average="micro") # 平均值的召回率,就是先把TP和P取均值再计算
recall3 = metrics.recall_score(real, pred, labels=[1,2,3], average="macro") # 三个召回率的平均值
recall4 = metrics.recall_score(real_prob, pred_bin, pos_label=0) # 二分类召回率,返回0的召回率
precision1 = metrics.precision_score(real, pred, labels=[1,2,3], average=None) # 多分类精准率,返回每个分类的精准率
precision2 = metrics.precision_score(real, pred, labels=[1,2,3], average="micro") # 平均值的精准率,就是先把TP和P取均值再计算
precision3 = metrics.precision_score(real, pred, labels=[1,2,3], average="macro") # 三个精准率的平均值
precision4 = metrics.precision_score(real_prob, pred_bin, pos_label=0) # 二分类精准率,返回0的精准率
f1score1 = metrics.f1_score(real, pred, labels=[1,2,3], average=None) # 多分类f1_score,返回每个分类的精准率
f1score2 = metrics.f1_score(real, pred, labels=[1,2,3], average="micro") # 平均值的f1_score,就是先把TP和P取均值再计算
f1score3 = metrics.f1_score(real, pred, labels=[1,2,3], average="macro") # 三个f1_score的平均值
f1score4 = metrics.f1_score(real_prob, pred_bin, pos_label=0) # 二分类f1_score,返回0的精准率print(accuracy1, accuracy2, accuracy3)
print(recall1)
print(recall2, recall3, recall4)
print(precision1)
print(precision2, precision3, precision4)
print(f1score1, 2*precision1*recall1 / (precision1 + recall1))
print(f1score2, 2*precision2*recall2 / (precision2 + recall2))
print(f1score3, f1score1.mean())
print(f1score4, 2*precision4*recall4 / (precision4 + recall4))

结果:

0.4 4 0.7
[0.5        0.33333333 0.4       ]
0.4 0.41111111111111115 0.6
[0.25       0.33333333 0.66666667]
0.4 0.4166666666666667 0.75
[0.33333333 0.33333333 0.5       ] [0.33333333 0.33333333 0.5       ]
0.4000000000000001 0.4000000000000001
0.38888888888888884 0.38888888888888884
0.6666666666666665 0.6666666666666665

混淆矩阵:

confusion_matrix1 = metrics.confusion_matrix(real, pred, labels=[1, 2, 3]) # 多分类混淆矩阵
confusion_matrix2 = metrics.confusion_matrix(real_prob, pred_bin, labels=[0, 1]) # 二分类混淆矩阵
print(confusion_matrix1)
print(confusion_matrix2)

结果:

[[1 1 0][1 1 1][2 1 2]]
[[3 2][1 4]]

ROC、AUC:

fpr, tpr, thresholds = metrics.roc_curve(real_prob, pred_prob, pos_label=1) # roc曲线的FPR, TPR和阈值
auc1 = metrics.auc(fpr, tpr)
auc2 = metrics.roc_auc_score(real_prob, pred_prob, average=None) # 应该是可以计算多类情况,不尝试了
print(fpr, tpr, thresholds)
print(auc1, auc2)

结果:

[0.  0.  0.2 0.6 0.6 1. ] [0.2 0.4 0.6 0.6 1.  1. ] [0.8 0.7 0.5 0.4 0.2 0.1]
0.74 0.74

混淆矩阵+F1score+ROC曲线+AUC相关推荐

  1. scikit-learn中评估分类器性能的度量,像混淆矩阵、ROC、AUC等

    评估分类器性能的度量,像混淆矩阵.ROC.AUC等 内容概要 模型评估的目的及一般评估流程 分类准确率的用处及其限制 混淆矩阵(confusion matrix)是如何表示一个分类器的性能 混淆矩阵中 ...

  2. 搞懂回归和分类模型的评价指标的计算:混淆矩阵,ROC,AUC,KS,SSE,R-square,Adjusted R-Square

    今天看到某同学总结了回归和分类模型的评价指标,两篇博客讲的特别清楚,看完后以前的疑惑都解除了,收获很大,加一点补充,整理出来方便以后查看,蓝色的大标题是原文链接. 回归模型的几个评价指标 对于回归模型 ...

  3. 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

    一.前述 怎么样对训练出来的模型进行评估是有一定指标的,本文就相关指标做一个总结. 二.具体 1.混淆矩阵 混淆矩阵如图:  第一个参数true,false是指预测的正确性.  第二个参数true,p ...

  4. 混淆矩阵、ROC、AUC 学习记录

    混淆矩阵也称误差矩阵,主要比较分类结果与实际预测值之间的差异可以将分类结果的精度显示在一个混淆矩阵里面. 下表为二分类问题的混淆矩阵: 预测为0 预测为1 真实为0 TN FP 真实为1 FN TP ...

  5. 五分钟秒懂机器学习混淆矩阵、ROC和AUC

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第18篇文章,我们来看看机器学习领域当中,非常重要的其他几个指标. 混淆矩阵 在上一篇文章当中,我们在介绍召回率.准确率 ...

  6. 【笔记】混淆矩阵和ROC曲线

    文章目录 一.混淆矩阵 二.重要指标 三.ROC曲线 一.混淆矩阵 预测为真 预测为假 真实为真 TP (True Positive) FN (False Negative) 真实为假 FP (Fal ...

  7. matlab混淆矩阵和roc曲线,从混淆矩阵绘制ROC曲线

    我需要确定不同的分类模型预测值的能力.为了做到这一点,我需要绘制一个ROC曲线,但我正在努力开发一种方法.在 我包括了我的整个python代码以及到我使用的数据集的链接.它看起来有很多代码,但实际上很 ...

  8. 分类模型评估---从混淆矩阵到ROC,AUC,GINI,KS,Lift,Gain,MSE

    4.4.2分类模型评判指标(一) - 混淆矩阵(Confusion Matrix) https://blog.csdn.net/Orange_Spotty_Cat/article/details/80 ...

  9. 模型评价指标——混淆矩阵/ROC曲线/AUC曲线

    一.混淆矩阵 TP = True Postive真阳性:FP = False Positive假阳性 :FN = False Negative假阴性:TN = True Negative真阴性 ① 精 ...

  10. 决策树及分类模型评价指标(混淆矩阵,LIFT曲线 重要)

    决策树评价指标:ROC lift(提升度):类似提纯:按照decile从高到低排列,之后计算每个decile里响应数与该decile里行数的比值得到一个response rate,另外,单独计算所有行 ...

最新文章

  1. AI技术在安防市场上的应用主要还存有几个挑战
  2. speedtorch 加速神经网络
  3. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
  4. 异常org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 11; 注释中不允许出现字符串 --。的原因...
  5. Ehab and Prefix MEXs CodeForces - 1364C(思维)
  6. 在Ubuntu服务器上打开第二个控制台会话
  7. python 共享文件夹 密码_用不同的用户名和密码登录网络上的共享文件夹
  8. java 位运算 权限控制_java 位运算权限管控(转载)
  9. hdu1054(最小顶点覆盖)
  10. 一文搞定Linux环境下线程编程,这些东西老师也不会教你。(史上最详细的线程攻略)
  11. LeetCode81. 搜索旋转排序数组 II(二分查找)
  12. orm设置bool型 python_详解python的ORM中Pony用法
  13. python 合并不同文件夹下名称相同的文件
  14. html商城网站模板
  15. Android Exif 解析
  16. 关于MD5码的一些自我总结
  17. 360极速浏览器调用selenium
  18. 一个劣质无线鼠标接收器导致笔记本无线网络连接出现故障
  19. java中设置基偶隔行换色_Excel2016中奇偶行填充不同颜色的方法
  20. 如何离线在itpub上发表博文

热门文章

  1. 计算机红外,计算机在红外光谱中的应用?
  2. 12、同花顺网页Post登陆RSA算法分析【Post/Js逆向笔记】
  3. 关于计算机显示器,关于计算机显示器的指示灯?
  4. python3--爬虫-批量词典翻译英文单词
  5. openstack基础平台部署
  6. [經典]美国银行:服务好得让人感觉有“阴谋”
  7. Java的俩个list之间比较,判断是否一致的方法
  8. 单板开发中常用的板级协议全解
  9. 无刺激性化妆品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. FOXBORO FBM233 控制主板模块