分类器评价与在R中的实现:混淆矩阵
来源:互联网 发布:惠州酷友网络 刘文武 编辑:程序博客网 时间:2024/04/29 11:04
分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类模型评价与在R中的实现”系列中将逐个介绍。
本篇介绍最基础的混淆矩阵。
一、混淆矩阵简介
混淆矩阵将分类预测结果与实际目标进行比较,并汇总成NXN列联表(N为分类类型数)。
以二元分类为例:
<td colspan="2">Confusion Matrix Target PositiveNegativeModelPositiveTrue Positives(TP)False Positives(FP)NegativeFalse 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中的实现:混淆矩阵
- 分类器评价与在R中的实现:混淆矩阵
- 分类器评价与在R中的实现:ROC图与AUC
- 分类器评价与在R中的实现:收益图与提升图
- 分类器评价、混淆矩阵与ROC曲线
- 不周山:分类器评价、混淆矩阵与ROC曲线
- 分类器评价、混淆矩阵与ROC曲线
- 分类器评价、混淆矩阵与ROC曲线
- 分类器评价参数之混淆矩阵
- 分类器评价参数之混淆矩阵
- 影像分类中的混淆矩阵
- 二分类与混淆矩阵
- 遥感分类精度评价方法--混淆矩阵和kappa系数
- R:混淆矩阵
- MATLAB中的混淆矩阵的实现
- 基于混淆矩阵的评价指标
- 机器学习模型评价指标 -- 混淆矩阵
- java计算混淆矩阵(分类指标:查准率P,查全率R,P和R的调和均值F1,正确率A)
- 0004算法笔记——【分治法】合并排序
- spring boot executable jar/war 原理
- Oracle的本地网络服务名配置
- LeetCodet题解--11. Container With Most Water
- poj--3061 Subsequence(前缀和 or 尺取法)
- 分类器评价与在R中的实现:混淆矩阵
- STC15官方库函数
- CentOS 7上安装Zabbix(快速安装监控工具Zabbix)
- java异常处理(一)
- Cocos2d-x 3.9教程:3.音乐的播放
- 虚拟机三种网络连接方式
- [LeetCode]114. Flatten Binary Tree to Linked List
- Android学习笔记---第二天---基础UI组件---TextView
- 数据结构学习-线性表(2)