问题的提出

如果决策树的目标是尽量捕获少数类,则准确率模型评估的意义不大,需要新的模型评估指标。简单来看,只需要查看模型在少数类上的准确率就好,只要能够将少数类尽量捕捉出来,就能够达到目的。
但是,新问题又出现了,对多数类判断错误后,会需要人工甄别或者更多的业务上的措施来一一排除判断错误的多数类,这往往伴随着很高的成本。比如银行在判断”一个申请信用卡的客户是否会出现违约行为“的时候,如果一个客户被判断为”会违约“,这个客户的信用卡申请就会被驳回,如果为了捕捉出”会违约“的人,大量地将”不不会违约“的客户判断为”会违约“的客户,就会有许多无辜的客户申请被驳回。信用卡对银行来说意味着利息收入,而拒绝了许多本来不会违约的客户,对银行来说就是巨大的损失。同理,大众在召回不符合欧盟标准的汽车时,如果为了找到所有不符合标准的汽车,而将一堆本来符合标准了的汽车召回,这个成本是不可估量的。
也就是说,单纯地追求捕捉出少数类,会使成本太高,而不顾及少数类,又无法达成模型的效果。所以,在现实中,往往在寻找捕获少数类的能力和将多数类判错后需要付出的成本的平衡。如果一个模型在能够尽量捕获少数类的情况下,还能够尽量对多数类判断正确,则这个模型就非常优秀了。为了评估这样的能力,我们将引入新的模型评估指标:混淆矩阵。

混淆矩阵

混淆矩阵是二分类问题的多维衡量量指标体系,在样本不平衡时极其有用。在混淆矩阵中,我们将少数类认为是正例,多数类认为是负例。在决策树,随机森林这些普通的分类算法里,即是说少数类是1,多数类是0。在SVM里,就是说少数类是1,多数类是-1。
普通的混淆矩阵,一般使用{0,1}来表示。
混淆矩阵,阵如其名,十分容易让人混淆,在许多教材中,混淆矩阵中各种各样的名称和定义让大家难以理解和记忆。下面以一种简化的方式来显示标准二分类的混淆矩阵,如图所示:

其中,行代表预测情况,列则表示实际情况,positive表示阳性,即为真,negative则表示阴性,即为假。
因此,矩阵中四个元素分别表示:
TP(True Positive):真实为1,预测也为1
FN(False Negative):真实为1,预测为0
FP(False Positive):真实为0,预测为1
TN(True Negative):真实为0,预测也为0
基于混淆矩阵,有一系列不同的模型评估指标,这些评估指标的范围都在[0,1]之间,所有以11和00为分子的指标都是越接近1越好,所以01和10为分子的指标都是越接近0越好。对于所有的指标,用橙色表示分母,用绿色表示分子,则有:

模型整体效果:准确率

准确率Accuracy


准确率Accuracy是所有预测正确的所有样本除以总样本,通常来说越接近1越好。

捕捉少数类的艺术:精确度,召回率和F1 score

精确度Precision


精确度Precision,又叫查准率,表示在所有预测结果为1的样例数中,实际为1的样例数所占比重。

Precision = (Ytest[Ytest == clf.predict(Xtest)]==1).sum()/(clf.predict(Xtest)==1).sum()

精确度越低,则代表误伤了过多的多数类。精确度是”将多数类判错后所需付出成本“的衡量。
做了样本平衡之后,精确度是下降的。因为很明显,样本平衡之后,有更多的多数类被我们误伤了。精确度可以帮助我们判断,是否每一次对少数类的预测都精确,所以又被称为”查准率“。在现实的样本不平衡例子中,当每一次将多数类判断错误的成本非常高昂的时候(比如大众召回车辆的例子),我们会追求高精确度。精确度越低,我们对多数类的判断就会越错误。当然了,如果我们的目标是不计一切代价捕获少数类,那我们并不在意精确度。

召回率Recall


召回率Recall,又被称为敏感度(sensitivity)真正率查全率,表示所有真实为1的样本中,被我们预测正确的样本所占的比例。召回率越高,代表我们尽量捕捉出了越多的少数类,召回率越低,代表我们没有捕捉出足够的少数类。

#所有predict为1并且正确的点 / 全部为1的点的比例
#对于没有class_weight的决策树来说:
Recall_1 = (Ytest[Ytest == clf.predict(Xtest)] == 1).sum()/(Ytest == 1).sum()
Recall_1
0.4827586206896552
#对于有class_weight的决策树来说:
Recall_2 = (Ytest[Ytest == wclf.predict(Xtest)] == 1).sum()/(Ytest == 1).sum()
Recall_2
0.5862068965517241

可以看出,做样本平衡之前,只成功捕获了了48%的少数类点,而做了样本平衡之后的模型,捕捉出了58%的少数类点。召回率可以帮助判断是否捕捉了全部的少数类,所以又叫做查全率。
如果希望不计一切代价,找出少数类(比如找出潜在犯罪者的例子),就会追求高召回率,相反,如果目标不是尽量捕获少数类,就不需要在意召回率。
注意召回率和精确度的分子是相同的(都是11),只是分母不同⽽而召回率和精确度是此消彼长的,两者之间的平衡代表了捕捉少数类的需求和尽量不要误伤多数类的需求的平衡。究竟要偏向于哪一方,取决于我们的业务需求:究竟是误伤多数类的成本更高,还是无法捕捉少数类的代价更高。

F1 score(F measure)

为了同时兼顾精确度和召回率,我们创造了两者的调和平均数作为考量量两者平衡的综合性指标,称之为F1 score(F measure)。两个数之间的调和平均倾向于靠近两个数中比较小的那一个数,因此,追求尽量量高的F measure,能够保证精确度和召回率都比较高。F measure在[0,1]之间分布,越接近1越好。

#F1 score(F measure)
#对于没有class_weight的决策树
F_1 = 2*Precision_1*Recall_1/(Precision_1+Recall_1)
F_1
0.5490196078431373
#对于有class_weight的决策树
F_2 = 2*Precision_2*Recall_2/(Precision_2+Recall_2)
F_2
0.6296296296296295

由结果可知,此处我们应选择有class_weight的决策树。

注意,多分类问题也有混淆矩阵,但其应用范围并不广,此处不做深入讨论。

sklearn中的混淆矩阵

sklearn提供了大量的类来帮助我们了解和使用混淆矩阵。

#scikit-learn混淆矩阵库
from sklearn import metrics
ypred = wclf.predict(Xtest)
# Precision
metrics.precision_score(Ytest,ypred)
0.68
# accuracy
metrics.accuracy_score(Ytest,ypred)
0.9090909090909091
# Recall
metrics.recall_score(Ytest,ypred)
0.5862068965517241
# F-measure
metrics.f1_score(Ytest,ypred)
0.6296296296296295

决策树分类评估指标之混淆矩阵相关推荐

  1. R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...

  2. R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化.岭回归模型分类评估计算(混淆矩阵. ...

  3. 评估指标:混淆矩阵、PR、mAP、ROC、AUC

    文章目录 TP.TN.FP.FN 准确率 Accuracy 和 错误率 Error rate 混淆矩阵 confusion matrix 查准率 Precision 和 召回率 Recall PR 曲 ...

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

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

  5. 机器学习(五)之评价指标:二分类指标、多分类指标、混淆矩阵、不确定性、ROC曲线、AUC、回归指标

    文章目录 0 本文简介 1 二分类指标 1.1 二分类时的错误类型 1.2 不平衡的数据 1.3 混淆矩阵 1.4 考虑不确定性 1.5 准确率-召回率曲线 1.6 ROC与AUC 2 多分类指标 3 ...

  6. R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标

    R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录

  7. 机器学习 | 分类评估指标

    文章目录 1. 分类评估指标 1.1 混淆矩阵 Confusion Matrix 1.1.1 scikit-learn 混淆矩阵函数接口 1.2 真阳性TP.假阳性FP.真阴性TN.假阴性FN 1.2 ...

  8. 详细讲解分类模型评价指标(混淆矩阵)python示例

    前言 1.回归模型(regression): 对于回归模型的评估方法,通常会采用平均绝对误差(MAE).均方误差(MSE).平均绝对百分比误差(MAPE)等方法. 2.聚类模型(clustering) ...

  9. Python将classification_report的结论转化为字典(dict)形式并提取模型的灵敏度(sensitivity)、特异度(specificity)、PPV和NPV指标、混淆矩阵图

    Python将classification_report的结论转化为字典(dict)形式并提取模型的灵敏度(sensitivity).特异度(specificity).PPV和NPV指标.混淆矩阵图 ...

最新文章

  1. 历史 history
  2. 2018-2019年新一代AI领域十大最具成长性技术展望
  3. Redis持久化和备份数据
  4. ActiveMQ入门系列二:入门代码实例(点对点模式)
  5. Visual Studio 2017各版本安装包离线下载、安装全教程
  6. 2020蓝桥杯省赛---java---B---1(指数计算)
  7. 硅谷Web 2.0时代即将结束? 实用型公司更受关注
  8. 设计师必备,设计导航网站一流设计导航|16map
  9. [PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返回结果数据
  10. Android学习之布局管理器嵌套
  11. 经常有职场上的朋友问我,要怎么去轻资产创业?
  12. poj1005——I Think I Need a Houseboat
  13. java泛型范围_Java泛型类型中的通配符参数在其范围内的正式条件是什么?
  14. [BZOJ4540][HNOI2016]序列(莫队)
  15. 基于Unity开发的鼠标打飞碟游戏设计
  16. java可以编辑 cad吗_MiniCAD 简单的java画图,能画圆、直线、矩形,还能移动,修改颜色等 Develop 238万源代码下载- www.pudn.com...
  17. 迷宫算法总结(总路径数、方法数)
  18. 基于二阶矩阵的优化问题(一)线搜索策略(附matlab代码)
  19. DOM以及DOM事件的处理方式
  20. hp-unix操作系统root账号被锁定的两种解决方法:

热门文章

  1. hp mfp m281fdw 彩色激光打印机不通电
  2. 前端程序员初步认识 docker
  3. AssestsStdio使用例--提取游戏《废墟图书馆》内的素材
  4. 时间管理的十一条黄金定律
  5. 纯前端实现—抽奖小游戏
  6. 带你开发个转盘抽奖小游戏【附源码】
  7. Nginx 访问日志增长暴增出现尖刀的详细分析
  8. 【马士兵】笔记_Java网络编程
  9. 2020北大软微复试知识整理
  10. c#窗体编辑个人简历_编辑个人简历求职简历