分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类模型评价与在R中的实现”系列中将逐个介绍。

本篇介绍最基础的混淆矩阵。

一、混淆矩阵简介

混淆矩阵将分类预测结果与实际目标进行比较,并汇总成NXN列联表(N为分类类型数)。

以二元分类为例:

<td  colspan="2">Confusion Matrix

  Target  
    Positive Negative
Model Positive True Positives(TP) False Positives(FP)
Negative False Negatives(FN) True Negatives(TN)
    Positive Samples(P) Negative Samples(N)

由上表可以计算的指标有:
Accuracy = (TP+TN)/(P+N)
Error Rate = 1 – Accuracy = (FP+FN)/(P+N)
False Positive Rate = Fallout = FP/N
True Positive Rate = Recall = Sensitivity = TP/P
False Negative Rate = Miss = FN/P
True Negative Rate = Specificity = TN/N
Positive Predictive Value = Precision = TP/(TP+FP)
Negative Predictive Value = TN/(TN+FN)
Prediction-conditioned Fallout = FP/(TP+FP)
Prediction-conditioned Miss = FN/(TN+FN)
Rate of Positive Predictions = Detection Prevalence = (TP+FP)/(P+N)
Rate of Negative Predictions = (TN+FN)/(P+N)
Prevalence = (TP+FN)/(P+N)
Detection Rate = TP/(P+N)
Balanced Accuracy = (Sensitivity+Specificity)/2

是不是感觉这些货已经组合完所有的分子/分母了?没关系,其实只要知道TP和TN越高越好就好了。

二、在R中计算混淆矩阵

这次使用ROCR包中的ROCR.simple数据集,其中prediction是预测值,labels为真实值。

require(ROCR)
data(ROCR.simple)
str(ROCR.simple)
## List of 2
##  $ predictions: num [1:200] 0.613 0.364 0.432 0.14 0.385 ...
##  $ labels     : num [1:200] 1 1 0 0 0 1 1 1 1 0 ...

1 用table()直接计算

在确定好阀值后,可以直接用table函数计算列联表,再根据之前的公式计算各个指标。假设我们认为prediciton>0.5的都预测为1,其余为0.

pred.class <- as.integer(ROCR.simple$predictions > 0.5)
print(cft <- table(pred.class, ROCR.simple$labels))
##
## pred.class  0  1
##          0 91 14
##          1 16 79

通过对混淆矩阵中数值的计算可以得到:

tp <- cft[2, 2]
tn <- cft[1, 1]
fp <- cft[2, 1]
fn <- cft[1, 2]
print(accuracy <- (tp + tn)/(tp + tn + fp + fn))
## [1] 0.85
print(sensitivity <- tp/(tp + fn))
## [1] 0.8495
print(specificity <- tn/(tn + fp))
## [1] 0.8505

2 用confusionMatrix()算

如果不想手动算,可以借助caret包中的confusionMatrix函数计算。该函数既可以用混淆矩阵的结果,也可以直接输入预测/目标两列原始数据计算上述值。只要确定好positive分类是那个,就能得出跟之前一样的结果。

require(caret)
confusionMatrix(cft, positive = "1")
confusionMatrix(pred.class, ROCR.simple$labels, positive = "1")
## Confusion Matrix and Statistics
##
##           Reference
## Prediction  0  1
##          0 91 14
##          1 16 79
##
##                Accuracy : 0.85
##                  95% CI : (0.793, 0.896)
##     No Information Rate : 0.535
##     P-Value [Acc > NIR] : <2e-16
##
##                   Kappa : 0.699
##  Mcnemar's Test P-Value : 0.855
##
##             Sensitivity : 0.849
##             Specificity : 0.850
##          Pos Pred Value : 0.832
##          Neg Pred Value : 0.867
##              Prevalence : 0.465
##          Detection Rate : 0.395
##    Detection Prevalence : 0.475
##       Balanced Accuracy : 0.850
##
##        'Positive' Class : 1
##

三、混淆矩阵的缺点

1 需要自己确定阀值

可以看到,混淆矩阵4个值的确定都依赖于最直线我们主观设定的0.5。如果只依靠混淆矩阵这种原始的方法,那么不经过繁琐的试错我们无法确认哪个阀值是最好的。

2不平衡数据鲁棒性不好

一些positive事件发生概率极小的不平衡数据集(imbalanced data),混淆矩阵可能效果不好。比如对信用卡交易是否异常做分类的情形,很可能1w笔交易中只有1笔交易是异常的。一个将将所有交易都判定为正常的分类器,准确率是99.99%。这个数字虽然很高,但是没有任何现实意义。

在之前列举的各种分类模型评价方法中,收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)都对混淆矩阵的缺点的有改进。参考后续。

from: http://iccm.cc/classification-model-evaluation-confusion-matrix/

分类器评价与在R中的实现:混淆矩阵相关推荐

  1. 分类器评价与在R中的实现:ROC图与AUC

    分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix).收益图(Gain Chart).提升图(Lift Chart).KS图(KS Chart).接受者操作特性曲线(ROC C ...

  2. 分类器评价与在R中的实现:收益图与提升图

    分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix).收益图(Gain Chart).提升图(Lift Chart).KS图(KS Chart).接受者操作特性曲线(ROC C ...

  3. R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix)、R语言多分类混淆矩阵可视化

    R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix).R语言多分类混淆矩阵可视化 目录

  4. ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略

    ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介.使用方法.代码实现.案例应用之详细攻略 目录 分类预测的简介 分类预测问题中评价指标(ER/ROC-AUC ...

  5. r语言中怎样获得混淆矩阵

    在 R 中,你可以使用 confusionMatrix() 函数来获得混淆矩阵.这个函数是 caret 包中的一部分.首先,你需要安装并载入 caret 包: install.packages(&qu ...

  6. 机器学习中的混淆矩阵

    在我们的机器学习教程(前面的章节Python和NumPy的神经网络和神经网络从头开始),我们实现的各种算法,但是我们没有正确地测量输出的质量.主要原因是我们使用非常简单的小数据集来学习和测试.在Neu ...

  7. 分类器MNIST交叉验证准确率、混淆矩阵、精度和召回率(PR曲线)、ROC曲线、多类别分类器、多标签分类、多输出分类

    本博客是在Jupyter Notebook下进行的编译. 目录 MNIST 训练一个二分类器 使用交叉验证测量精度 混淆矩阵 精度和召回率 精度/召回率权衡 ROC曲线 多类别分类器 错误分析 多标签 ...

  8. 独家 | 在R中使用LIME解释机器学习模型

    作者:PURVAHUILGOL 翻译:陈丹 校对:欧阳锦 本文约3200字,建议阅读15分钟 本文为大家介绍如何在R中使用LIME来解释机器学习模型,并提供了相关代码. 关键词:机器学习模型解释.R语 ...

  9. 图像梯度增强_使用梯度增强机在R中进行分类

    图像梯度增强 背景 (Background) Purpose of analysis: 分析目的: Understand the factors driving student success so ...

最新文章

  1. 关于数据中台的深度思考与总结(超级干货)
  2. ValueError: Bin labels must be one fewer than the number of bin edges
  3. 鸿蒙 github harmony,鸿蒙HarmonyOS之AbilitySlice间导航
  4. 海外区域财务共享中心建设
  5. 连载三:Oracle升级文档大全
  6. java中的位移运算符_Java 位移运算符
  7. android:获取网络时间、文件路径,修改包名,发布release版本
  8. java 单体 启动优化_java设计优化之单例模式
  9. 无人机计算机模拟飞行,学习无人机,怎么安装无人机模拟器?
  10. 汉字转换成拼音、获取拼音转换
  11. 曾宪武《物联网通信技术》课后答案(三)
  12. cad字体渐变_CAD制造特效字体
  13. 软件开发人员的简历项目经验
  14. 乌鲁木齐云计算中心将于5月正式竣工并投入使用
  15. 字节跳动AI lab计算机视觉实习生面试教训
  16. centos7根分区扩容(适用目前主流版本)
  17. 排列组合,字符串——Killer Names
  18. 【制作fnt格式字体】 BMFont中文字体图集制作的方法~
  19. 解决硬盘自动休眠问题
  20. linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk

热门文章

  1. sklearn-GridSearchCV调节超参数
  2. elasticsearch实战三部曲之三:搜索操作
  3. 区块链研习 | 区块链里所说的“智能合约”是什么? 本文作者:敖萌 编辑:温晓桦 2017-10-11 20:31 导语:谈到区块链,必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能
  4. 小工匠聊架构-超高并发秒杀系统设计 03_热点数据的处理
  5. 邀请参加活动的邀请函_邀请函||王坝镇中心幼儿园邀请家长参加期中分享活动的通知...
  6. executequery方法_【接口测试】soapui中数字、字符串、日期时间、数据库连接参数化的设置方法...
  7. 各类木材强度_木材的力学性能
  8. PyQt5教程7:布局Layout管理
  9. linux 7 vsftpd 配置,centos7下vsftpd配置
  10. python怎么选择安装位置图片_怎么下载官网python并安装