简介

模型评估通常作为建模的最后一步,用于评估模型效果,判别该模型是否达到预期。但实际模型评估指标需要在建模的第一步确定,即确定目标函数。凡事都得有个目标,才知道努力的(拟合)方向,否则枉然。
连续值或者分类型的预测最常用的说法就是模型精度,但实际精度一词有多重含义,例如连续性预测模型常用的是MAPE/RMSE,而分类常用AUC/accuracy/recall/specify等等。本文将介绍常用的评估指标,并对应下各指标的不同称呼。

0-1分类预测的评估

一般的分类都是二元分类,而最常用的则是ROC曲线下方的面积AUC值了。首先需要知道混淆矩阵的构成,以及其衍生的一系列评估指标,取其不同阈值下的两个评估指标,即可构成ROC曲线,而曲线下方的面积,即为AUC值。

混淆矩阵

对于而分类问题,记1为正例,0为负例,预测和实际的值则会出现4中组合,例如,对某一样本,预测值为1(Positive),而实际值也为1,说明预测正确,即为 True Positive(真正例),反之如果实际值为0,则预测错误,即为 False Positive(假正例)。根据4中组合,得到混淆矩阵如下:

预测-1 预测-0
实际-1 True Positive(TP) False Negative(FN) Actual Positive (P=TP+FN)
实际-0 False Positive(FP) True Negative(TN) Actual Negative (N=FP+TN)
Predicted Positive (P’=TP+FP) Predicted Negative (N’=FN+TN) TP+FP+FN+TN

衍生的各种评估指标如下:

  • 准确率(accuracy)

    • TP+TNTP+FP+FN+TNTP+TNTP+FP+FN+TN
  • 错误率
    • FP+FNTP+FP+FN+TNFP+FNTP+FP+FN+TN
  • 敏感度(sensitivity)、真正例率、召回率(recall)
    • TPTP+FNTPTP+FN
  • 特效性(specificity)、真负例率
    • TNFP+TNTNFP+TN
  • 精度(precision)
    • TPTP+FPTPTP+FP
  • F1F1、F分数(精度和召回率的调和均值)
    • 2×precision×recallprecision+recall=F1=2TP2TP+FP+FN2×precision×recallprecision+recall=F1=2TP2TP+FP+FN
    • 实际来自于: 2F1=1P+1R2F1=1P+1R

ROC曲线

分类模型的原始预测值是0~1之间的连续型数值,可理解为因变量取1的概率,一般取0.5作为阈值,即小于0.5记为预测的0,大于等于0.5记为预测的1;而实际上根据不同情况可以取不同的阈值。

例如,银行预测可能发生贷款逾期的账目,由于整体逾期率非常低,例如样本中100个只有1个逾期,如果只看准确率,那么全预测0(即,不逾期)则可达到99%的准确率,显然不妥,因此此时会秉着宁可错杀一千不可放过一个的原则,会将阈值适当降低,例如降到0.1,若大于0.1则预测为1。(实际上此时主要的评估指标会选择recall)。

用不同的阀值,统计出每组不同阀值下的精确率和召回率,

  • 横坐标:假正率(FPR,即 1-specificity,1-真负例率)

    • FPR = FP /(FP + TN)
  • 纵坐标:真正例率(TPR, 即 recall
    • TPR = TP /(TP + FN)

即可画出ROC曲线(受试者工作特征曲线,receiver operating characteristic curve),示例(图片来源于他处)如下

ROC曲线优势就是,当正负样本的分布发生变化时,其形状能够基本保持不变,因此其面积AUC值,可以说是极度适用于不平衡样本(例如以上的银行逾期数据,正负比极度不均衡)的建模评估了。AUC越大,模型分类效果越好,一般来说,AUC低于0.7的模型基本上是个废柴了。(若在正负样本比1:1情况下全预测为0或者1,AUC即为0.5)

R语言实现

可使用ROCR包计算AUC值,混淆矩阵自己写即可,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
library(ROCR)
get_confusion_stat <- function(pred,y_real,threshold=0.5){# auctmp <- prediction(as.vector(pred),y_real)auc <- unlist(slot(performance(tmp,'auc'),'y.values'))# statisticpred_new <- as.integer(pred>threshold) tab <- table(pred_new,y_real)if(nrow(tab)==1){print('preds all zero !')return(0)}TP <- tab[2,2]TN <- tab[1,1]FP <- tab[2,1]FN <- tab[1,2]accuracy <- round((TP+TN)/(TP+FN+FP+TN),4)recall_sensitivity <- round(TP/(TP+FN),4)precision <- round(TP/(TP+FP),4)specificity <- round(TN/(TN+FP),4)# 添加,预测的负例占比(业务解释:去除多少的样本,达到多少的recall)neg_rate <- round((TN+FN)/(TP+TN+FP+FN),4)re <- list('AUC' = auc,'Confusion_Matrix'=tab,'Statistics'=data.frame(value=c('accuracy'=accuracy,'recall_sensitivity'=recall_sensitivity,'precision'=precision,'specificity'=specificity,'neg_rate'=neg_rate)))return(re)
}

引用上篇lasso-R示例博文的评估结果示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# $AUC
# [1] 0.8406198# $Confusion_Matrix# y_real
# pred_new   0   1# 0  20   8# 1  32 131# $Statistics# value
# accuracy           0.7906
# recall_sensitivity 0.9424
# precision          0.8037
# specificity        0.3846
# neg_rate           0.1466

连续值预测的评估

连续型变量的预测,通常使用MAPE和RMSE。对于回归问题的模型还经常使用拟合优度 R2R2 作为评估指标。

MAPE

MAPE(mean absolute percentage error)为平均百分比误差,预测连续型数据的准确率一般指1-MAPE,例如预测未来10个月的GDP数据,准确率达到98%,即代表该模型的预测 MAPE 为2%。

MAPE=∑t=1n∣∣∣observedt−predictedtobservedt∣∣∣×100nMAPE=∑t=1n|observedt−predictedtobservedt|×100n

MSE/RMSE

RMSE(root mean square error)为均方根误差,相应的MSE(mean square error)即为误差的平方和,两者含义一致,指标越小则模型效果越好。

RMSE=1N∑t=1N(observedt−predictedt)2−−−−−−−−−−−−−−−−−−−−−−−−−⎷RMSE=1N∑t=1N(observedt−predictedt)2

拟合优度

拟合优度(Goodness of Fit)是指回归直线对观测值的拟合程度。

R²/可决系数

度量拟合优度的统计量是可决系数(亦称确定系数)R²。R²的值越接近1,说明回归直线对观测值的拟合程度越好;反之,R²的值越小,说明回归直线对观测值的拟合程度越差。R²等于回归平方和( explained sum of squares)在总平方和( total sum of squares)中所占的比率,即回归方程所能解释的因变量变异性的百分比。

注意,回归问题才能用R²衡量

R2=SSregSStss=1−SSrssSStss=1−∑i(yi−fi)2∑i(yi−y¯)2R2=SSregSStss=1−SSrssSStss=1−∑i(yi−fi)2∑i(yi−y¯)2

由以上公式实际上可知,在带有截距项的线性最小二乘多元回归中(注意这个前提条件),R2R2就是预测值和实际值相关系数的平方,即(注意,一定是线性回归模型才行):

R2=cor(yreal,yfit)2R2=cor(yreal,yfit)2

调整的R²

在模型中增加多个变量(即使是无实际意义的变量)也能小幅度提高R平方的值,因此需要考虑模型的变量数作为相应惩罚,于是得到调整的R²如下:

R2adjusted=1−SSrss/(n−p−1))SStss/(n−1)Radjusted2=1−SSrss/(n−p−1))SStss/(n−1)

R语言实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# MAPE
get_mape <- function(fit,y){# 实际值为0的,直接不纳入计算re <- round(mean(ifelse(y==0,NA,abs(y-fit)/y),na.rm=T)*100,1)return(re)
}# R方,可决系数,coefficient of determination
get_rsq <- function(preds,actual,p=1){rss <- sum((actual - preds) ^ 2)tss <- sum((actual - mean(actual)) ^ 2)rsq <- round(1 - rss/tss,3)n <- length(preds)# 调整的R方 1-(1-rsq)*(n-1)/(n-1-1) 也一样rsq_ad <- round(1 - (rss/(n-p-1))/(tss/(n-1)),3)return(list('rsq'=rsq,'rsq_ad'=rsq_ad))
}

模型常用评估指标详解相关推荐

  1. 机器学习框架及评估指标详解

    目录 机器学习的步骤 train_test_split函数的详解 机器学习评估指标 分类模型评估指标

  2. 文本生成评估指标详解及计算(BLEU)

    paper: <BLEU: a Method for Automatic Evaluation of Machine Translation> Bleu 分数介于 0 和 1 之间.0.6 ...

  3. 一文看懂分类模型的评估指标:准确率、精准率、召回率、F1等

    2019-11-21 21:59:23 机器学习模型需要有量化的评估指标来评估哪些模型的效果更好. 本文将用通俗易懂的方式讲解分类问题的混淆矩阵和各种评估指标的计算公式.将要给大家介绍的评估指标有:准 ...

  4. sklearn评估指标Classification metrics常用指标详解及小坑

    sklearn评估指标Classification metrics常用指标详解及小坑 计算评估指标需要用到预测结果和真实标签,首先说一下获得预测结果的model.predict()和model.pre ...

  5. 目标检测模型的评估指标mAP详解(附代码)

    https://zhuanlan.zhihu.com/p/37910324 对于使用机器学习解决的大多数常见问题,通常有多种可用的模型.每个模型都有自己的独特之处,并随因素变化而表现不同. 每个模型在 ...

  6. 评估指标_供应链改进常用评估指标

    供应链改善项目大部分是基于供应链SCOR模型开展,在SCOR模型中,涉及到分销.计划.采购.制造.配送.退货等功能环节.而供应链的改善核心内容是流程的优化.规则的确定,最终体现在两大目标:" ...

  7. [Pytorch系列-61]:循环神经网络 - 中文新闻文本分类详解-3-CNN网络训练与评估代码详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  8. 消费金融五类风控指标详解

    一.序言 现在消费金融.现金贷发展的非常迅猛,几乎渗透于任何场景.最近一两年以来,国家对P2P的政策管制和对校园贷款.现金贷的政策越来越严格,笔者作为消费类金融从业者,需要学习的知识更多. 目前市面上 ...

  9. 深度学习分类任务常用评估指标

    摘要:这篇文章主要向大家介绍深度学习分类任务评价指标,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 本文分享自华为云社区<深度学习分类任务常用评估指标>,原文作者: ...

最新文章

  1. web 监听器 过滤器等组件
  2. ThinkPHP开发中遇到的小坑
  3. 头像裁剪_课堂裁剪|19级油画班油画头像写生作品
  4. Qt Creator建立和运行
  5. linux启动redis_Redis简介
  6. cefsharp.wpf离线安装包下载_在vscode里编写c++程序(解决gdb下载失败问题)
  7. TYVJ P1030 乳草的入侵 Label:跳马问题
  8. linux两文件对比,linux对比两个文件的差异
  9. java 日期for循环_java for循环的时候增加循环体的长度是不是不太好的?
  10. Think PHP url的四种访问方法。
  11. 几个跨平台移动App开发方案框架比较
  12. 兰勃特等角圆锥投影的双标准纬线的选择
  13. 用matlab计算矩阵的权重,用Excel计算层次分析法的矩阵权重分析
  14. Ubuntu20.04 虚拟机 联网
  15. 第七周-C语言 求方程的共轭复根
  16. html 手机端可以选择复制粘贴,js移动端实现网站内容复制粘贴功能
  17. 抖音巨量百应怎么发福袋?四川鹰迪
  18. P2504 [HAOI2006]聪明的猴子
  19. 【途牛旅游项目】项目环境搭建,实现登陆功能
  20. 安卓8.0下的应用安装

热门文章

  1. No module named curses
  2. Delphi汉字转拼音全拼
  3. Openstack基础环境交换机常用配置(CISCO 3750G为例).md
  4. 2019华东交通大学ACM基地简介
  5. 最简单的ssm框架整合搭建
  6. 金蝶EAS本地WebService发布
  7. Camtasia Studio CamStudio如何不录制鼠标
  8. 转换器max1166相关文章
  9. 675 为高尔夫比赛砍树(宽搜)
  10. 兄弟mfc9140cdn无法识别_兄弟Brother MFC-9140CDN打印机驱动下载