• 二分类问题
  • 多分类问题
  • 连续变量问题

一、二分类问题

二分类模型最常见的模型评价指标有: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 表示:实际没喝酒,被检测出喝酒的人数。

总结:

  1. ROC曲线单调递增,且每个点都在45度斜线上方(曲线面积大于0.5),意味着:TP > FP
  2. ROC曲线的斜率始终为正,意味着:FP,TP同增同减(从酒精检测曲线图中可以观测到)
  3. ROC曲线下方围成的面积值,就是 AUC(area under curve = AUC)
  4. 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

如何评价模型的好坏(一)相关推荐

  1. 机器学习中如何评价模型的好坏

    机器学习中如何评价模型的好坏 Week 2 主要学习机器学习中的基础知识 Targets for this week: 数据拆分:训练数据集&测试数据集 评价分类结果:精准度.混淆矩阵.精准率 ...

  2. 如何评价模型的好坏?

    回归: MSE(均方误差)-- 判定方法:值越小越好(真实值-预测值,平方之后求和平均) RMSE(均根方误差)-- 判定方法:值越小越好(MSE开根号) R squared/拟合优度   -- 判定 ...

  3. 信贷风控模型开发----模型流程好坏样本定义

    第二章 模型开发流程&好坏样本定义 2.1模型开发流程 2.1.1 评分模型流程图 2.1.2流程图阐述 2.2 好坏样本定义 2.2.1观察期.表现期.观察点 2.2.2举例说明 第二章 模 ...

  4. 怎样判断一个诊断(风险预测)模型的好坏?

    有一类研究看似简单,其实水挺深的. 比如你觉得前列腺特异性抗原(PSA)用来筛查前列腺癌不准确,你收集临床样本做了个癌和癌旁组织的lncRNA检测,筛选出差异表达的,建立回归模型,看它们对前列腺癌的预 ...

  5. 机器学习知识总结 —— 10. 评价模型的优劣方法与混淆矩阵

    文章目录 1. 如何评价一个模型的好坏 2. 与「混淆矩阵」有关的几个评价指标 2.1. 查准率/准确率 2.2. 查全率/召回率/查出率 3. 什么是PR曲线 1. 如何评价一个模型的好坏 评价一个 ...

  6. 浏览器性能对比测试方法与评价模型研究

    1. 引言 浏览器是检查.传递和展现万维网上信息资源的一个软件[1],运行客户电脑上,用来显示WEB服务器或文件系统中的HTML文件.[2]信息资源有可能是网页.图片.视频等,但每一个信息资源都由一个 ...

  7. perplexity 衡量指标_通俗解释困惑度 (Perplexity)-评价语言模型的好坏

    一.语言模型 本文尽量通俗解释一下困惑度的概念.既然题目中写了是用来评价语言模型的好坏,那么首先来看一下语言模型:忆臻:深入浅出讲解语言模型​zhuanlan.zhihu.com 简单地说,语言模型就 ...

  8. 基于Python的足球团队合作评价模型及英文论文

    2020 美赛 F 奖论文(一):摘要.绪论和模型准备 2020 美赛 F 奖论文(二)︰传球网络模型(PNM)的建立和影响因子分析 2020 美塞 F 奖论文(三)∶ 足球团队指标和基于机器学习的球 ...

  9. 深圳杯---人才吸引力评价模型研究

    人才吸引力评价模型研究 在世界各国和全国各地都加大争夺人才的背景下,一个城市要保持其竞争活力和创新力,必须与时俱进地但不盲目地调整相关人才吸引政策.2018年深圳市将加大营商环境改革力度作为一项重要工 ...

最新文章

  1. WinAPI: SetRect 及初始化矩形的几种办法
  2. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
  3. poj1743(后缀数组:最长不可重叠子串长度)
  4. C++primer 13.1.6节练习
  5. 计算机设计文献参考,优秀计算机设计论文参考文献 计算机设计论文参考文献数量是多少...
  6. Diango博客--11.Nginx + Gunicorn + Supervisor 方式部署
  7. (12)FPGA面试题处理信号跨时域
  8. 类和对象的基本理解与使用
  9. go mysql recover_Go基础系列:defer、panic和recover
  10. 排序算法专题-插入排序
  11. 国产WMS仓库管理系统排名
  12. 广数系统加工中心编程_编程十五年,谈谈对加工中心编程的一些看法...
  13. c#调用microsoft word将word另存为pdf
  14. 如何下载一个网页的背景图片
  15. 破解庞加莱猜想--中国人干的!
  16. 漫画:如何给女朋友解释灭霸的指响并不是真随机消灭半数宇宙人口的?
  17. Windows注册表的基本知识及应用
  18. 关于Arcgis这62个常用技巧,你造吗
  19. set头文件使用方法
  20. 微信零钱提现还要手续费?不存在的

热门文章

  1. WebBrowser 操作(从网上收集)
  2. Delphi 与C系列区别之已见(一)
  3. JAVASCRIPT C# 相互访问
  4. 23种设计模式C++源码与UML实现--桥接模式
  5. STM32开发 -- 蓝牙开发详解(2)
  6. zcmu1550(字符串最小表示法)
  7. c语言怎么在编码时改变颜色,怎么给贪吃蛇换一个颜色 怎么改 代码如下
  8. Java finally
  9. Tensorflow Day16 Autoencoder 實作
  10. android permission权限与安全机制解析(上)