如何评价模型的好坏(一)
- 二分类问题
- 多分类问题
- 连续变量问题
一、二分类问题
二分类模型最常见的模型评价指标有:ROC曲线,AUC,精准率-召回率,准确率,F1-score,混淆矩阵,等。
假设检验
案例分析:(酒驾检测)酒精浓度检测结果分布图。(绿色:正常司机酒精浓度检测结果分布。红色:酒驾司机酒精浓度检测结果分布)
引入三个概念:
- 原假设H0:没喝酒。
- 备择假设H1:喝了酒。
- 阈值Threshold:酒驾检测标准(分类的阈值,阈值大小可人为改变)
- 阈值左边:接受原假设H0。
- 阈值右边:拒绝原假设H0,接受备择假设H1。
- 阈值的划分,产生四个值: True Positive、True Negative、False Positive(假阳性)、False Negative(假阴性),这四个值构成混淆矩阵。
一般默认:原假设成立---Negative, 备择假设成立---Positive
混淆矩阵
检测:喝了酒(Positive) | 检测:没喝酒(Negative) | |
实际:喝了酒 | True Positive(TP) | False Negative(FN) |
实际:没喝酒 | False Positive(FP) | True Negative(FN) |
统计学上,
第一类错误:(弃真)False Positive 假阳性
第二类错误:(存伪)False Negative 假阴性
具体问题具体分析:
(1)医疗场景:可以容忍假阳性,但必须减少假阴性。(假阴性:某病人原本患某种疾病,却检测为没有生病)
(2)垃圾邮件识别:可以容忍假阴性,但必须减少假阳性。(假阳性:某个非常重要的邮件,被识别成垃圾邮件被删除,容易误事)
引入ROC曲线和AUC面积:
周志华《机器学习》33页:
ROC 全称是“Receiver Operating Characteristic 曲线”,它源于“二战”中用于敌机检测的雷达信号分析技术,二十世纪六七十年代来时被用于一些心理学、医学检测应用中,此后被引入机器学习领域[Spackman,1989]。ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR)
TPR = TP/(TP+FN)
FPR = FP/(TN+FP)
从上图可以看出:
- TPR(真正例率):TP + FN 表示:所有喝酒的人数,TP 表示:实际喝酒,被检测数喝酒的人数。
- FPR(假正例率):TN + FP 表示:所有没有喝酒的人数, FP 表示:实际没喝酒,被检测出喝酒的人数。
总结:
- ROC曲线单调递增,且每个点都在45度斜线上方(曲线面积大于0.5),意味着:TP > FP
- ROC曲线的斜率始终为正,意味着:FP,TP同增同减(从酒精检测曲线图中可以观测到)
- ROC曲线下方围成的面积值,就是 AUC(area under curve = AUC)
- ROC曲线离45度斜线越远,表示分类效果越好。
引入准确率(accuracy)、召回率(recall)、精准率(precision)、F1-score:
(上文提到)混淆矩阵:
检测:喝了酒(Positive) | 检测:没喝酒(Negative) | |
实际:喝了酒 | True Positive(TP) | False Negative(FN) |
实际:没喝酒 | False Positive(FP) | True Negative(FN) |
(1)准确率: accuracy = (TP+TN) / (TP+FN+FP+TN)
- TP+FN+FP+TN 表示:所有接受酒精检测的人数。 TP+TN 表示:所有检测正确的人数。
- 准确率(accuracy)表示:所有实例中,分类正确的比例。
(2)召回率:recall = TP / (TP+FN)
- TP+FN 表示:实际喝了酒的人数, TP 表示:实际喝了酒,被检测出喝了酒的人数。
- 召回率(recall)表示:所有正例中分类正确的比例。
(3)精准率: precision = TP / (TP+FP)
- TP+FP 表示:被检测出喝了酒的人数, TP 表示:实际喝了酒,被检测出喝了酒的人数
- 精准率(precision)表示:被分为正例的示例中实际为正例的比例。
分析:
对比:召回率(recall)和精准率(precision)两个公式,发现只有FN(假阴性)和FP(假阳性)表示不同。从酒精浓度检测曲线图中可以看出,FN 和 FP 不同增,即当 FN 增大时,FP会减少;当 FP 增加时,FN 会减少。 从而分析出,当 recall 增加时,precision 会减少;当precision 增加时,recall 会减少,“二者不可兼得”。为了平衡召回率(recall)和精准率(precision)两个指标,引入F-measure 和MAP(Mean Average Precision)
(4)F-measure = (1 + a2)* precision* recall / (a2 * precision + recall)
- 当参数a = 1时,即为 F1-score。
(4-1)F1-score = 2/(1/R + 1/P) = 2* R* P/(R + P)
- F1-score 表示 召回率 Recall(R)和精准率 Precision(P)的调和平均数
(5)平均准确率MAP(Mean Average Precision):实际上指的是Precision-recall曲线围成的面积,解决了precision,recall和F-measure的单点局限性。
(6)交并比 IOU(intersection over union):交比并
使用Python代码画图计算:
1. 计算 召回率(recall)、精准率(precision)和F1-score
1 from sklearn.metrics import accuracy_score, precision_score, recall_score,f1_score 2 y_true = [1,1,1,0,0,0,1] 3 y_pred = [0,1,1,0,1,0,0] 4 precision = precision_score(y_true, y_pred) 5 recall = recall_score(y_true, y_pred) 6 accuracy = accuracy_score(y_true, y_pred) 7 F1_Score = f1_score(y_true, y_pred) 8 print("precision = {}".format(precision)) 9 print("recall = {}".format(recall)) 10 print("accuracy = {}".format(accuracy)) 11 print("F1-score = {}".format(F1_Score))
结果显示: precision = 0.6666666666666666recall = 0.5accuracy = 0.5714285714285714F1-score = 0.5714285714285715
2. 画ROC曲线并计算AUC值
1 from sklearn.datasets import make_classification 2 from sklearn.linear_model import LogisticRegression 3 from sklearn.cross_validation import train_test_split 4 from sklearn.metrics import roc_auc_score, roc_curve 5 import matplotlib.pyplot as plt 6 7 # 生成分类数据(X,y) 8 X, y = make_classification(n_samples=10000, n_features=10, 9 n_classes=2,n_informative=5) 10 # 划分训练集和测试集 11 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2, random_state=0) 12 13 # 创建logistic回归模型 14 clf = LogisticRegression() 15 # 模型填充数据 16 clf.fit(X_train,y_train) 17 # 模型预测数据 18 preds = clf.predict_proba(X_test)[:,1] 19 20 # 产生fpr,tpr用于画ROC曲线 21 fpr,tpr,_ = roc_curve(y_test, preds) 22 # 计算AUC值 23 roc_auc = roc_auc_score(y_test,preds) 24 25 26 # 开始画图 27 plt.figure() 28 lw = 2 29 30 plt.plot(fpr, tpr, color='orange', 31 lw=lw, label='ROC_Curve (area = %0.2f)'% roc_auc) 32 33 plt.plot([0,1],[0,1], color='navy',lw=lw, linestyle='--') 34 plt.xlim([0.0, 1.0]) 35 plt.ylim([0.0, 1.05]) 36 plt.xlabel('False Positive Rate') 37 plt.ylabel('True Positive Rate') 38 plt.title('Receiver operating characteristic Line') 39 plt.legend(loc='lower right') 40 plt.show()
参考资料:
- 周志华 《机器学习》
- 万门大学教学视频 《实用数据挖掘与人工智能一月特训班》
- 百度百科关于假设性检验:http://baike.baidu.com/view/1445854.htm
- 关于MAP讲解的博客: https://blog.csdn.net/chengyq116/article/details/81290447
转载于:https://www.cnblogs.com/xdliyin/p/10349522.html
如何评价模型的好坏(一)相关推荐
- 机器学习中如何评价模型的好坏
机器学习中如何评价模型的好坏 Week 2 主要学习机器学习中的基础知识 Targets for this week: 数据拆分:训练数据集&测试数据集 评价分类结果:精准度.混淆矩阵.精准率 ...
- 如何评价模型的好坏?
回归: MSE(均方误差)-- 判定方法:值越小越好(真实值-预测值,平方之后求和平均) RMSE(均根方误差)-- 判定方法:值越小越好(MSE开根号) R squared/拟合优度 -- 判定 ...
- 信贷风控模型开发----模型流程好坏样本定义
第二章 模型开发流程&好坏样本定义 2.1模型开发流程 2.1.1 评分模型流程图 2.1.2流程图阐述 2.2 好坏样本定义 2.2.1观察期.表现期.观察点 2.2.2举例说明 第二章 模 ...
- 怎样判断一个诊断(风险预测)模型的好坏?
有一类研究看似简单,其实水挺深的. 比如你觉得前列腺特异性抗原(PSA)用来筛查前列腺癌不准确,你收集临床样本做了个癌和癌旁组织的lncRNA检测,筛选出差异表达的,建立回归模型,看它们对前列腺癌的预 ...
- 机器学习知识总结 —— 10. 评价模型的优劣方法与混淆矩阵
文章目录 1. 如何评价一个模型的好坏 2. 与「混淆矩阵」有关的几个评价指标 2.1. 查准率/准确率 2.2. 查全率/召回率/查出率 3. 什么是PR曲线 1. 如何评价一个模型的好坏 评价一个 ...
- 浏览器性能对比测试方法与评价模型研究
1. 引言 浏览器是检查.传递和展现万维网上信息资源的一个软件[1],运行客户电脑上,用来显示WEB服务器或文件系统中的HTML文件.[2]信息资源有可能是网页.图片.视频等,但每一个信息资源都由一个 ...
- perplexity 衡量指标_通俗解释困惑度 (Perplexity)-评价语言模型的好坏
一.语言模型 本文尽量通俗解释一下困惑度的概念.既然题目中写了是用来评价语言模型的好坏,那么首先来看一下语言模型:忆臻:深入浅出讲解语言模型zhuanlan.zhihu.com 简单地说,语言模型就 ...
- 基于Python的足球团队合作评价模型及英文论文
2020 美赛 F 奖论文(一):摘要.绪论和模型准备 2020 美赛 F 奖论文(二)︰传球网络模型(PNM)的建立和影响因子分析 2020 美塞 F 奖论文(三)∶ 足球团队指标和基于机器学习的球 ...
- 深圳杯---人才吸引力评价模型研究
人才吸引力评价模型研究 在世界各国和全国各地都加大争夺人才的背景下,一个城市要保持其竞争活力和创新力,必须与时俱进地但不盲目地调整相关人才吸引政策.2018年深圳市将加大营商环境改革力度作为一项重要工 ...
最新文章
- WinAPI: SetRect 及初始化矩形的几种办法
- vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
- poj1743(后缀数组:最长不可重叠子串长度)
- C++primer 13.1.6节练习
- 计算机设计文献参考,优秀计算机设计论文参考文献 计算机设计论文参考文献数量是多少...
- Diango博客--11.Nginx + Gunicorn + Supervisor 方式部署
- (12)FPGA面试题处理信号跨时域
- 类和对象的基本理解与使用
- go mysql recover_Go基础系列:defer、panic和recover
- 排序算法专题-插入排序
- 国产WMS仓库管理系统排名
- 广数系统加工中心编程_编程十五年,谈谈对加工中心编程的一些看法...
- c#调用microsoft word将word另存为pdf
- 如何下载一个网页的背景图片
- 破解庞加莱猜想--中国人干的!
- 漫画:如何给女朋友解释灭霸的指响并不是真随机消灭半数宇宙人口的?
- Windows注册表的基本知识及应用
- 关于Arcgis这62个常用技巧,你造吗
- set头文件使用方法
- 微信零钱提现还要手续费?不存在的