分类预测:混淆矩阵、PR曲线、ROC曲线、AUC

在分类任务中需要混淆矩阵(或者混淆表)对分类效果做评测,拿先看看混淆矩阵的概念:

(一)混淆矩阵:混淆矩阵也称误差矩阵,是表示精度评价的一种标准个格式。混淆矩阵是通过将每个实测像元的位置和分类图像中的相应位置和分类比较计算的。
混淆矩阵的每一行代表预测类别,每一列的总数测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
混淆矩阵可以得到三个预测指标:
1、准确率Accuracy:(C11+C22)/(C11+C12+C21+c22)
2、正确率Precision(y1):C11/(C11+C21)
3、召回率Recall(y1):C11/(C11+C12)
这里只对y1类别预测指标做了计算
举个例子说明一下:
假设我们有100篇文章,60篇军事,40篇科技
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
经过模型预测效果如上如分类器的类预测结果
这是就可以计算评测指标了
1、准确率Accuracy:(50+35)/(35+5+10+50) = 82%
2、正确率Precision(y1):50/(50+5) = 90.9%
3、召回率Recall(y1):50/(50+10) = 83.3%
y1代表的是军事,这里只计算了军事类的预测指标
对上述的混淆矩阵进行抽象就可以得到下面的抽象混淆矩阵:
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
1、正确率Precision:TP/(TP+FP),预测为正例的样本中真正正例的比例
2、召回率Recall:TP(TP+FN),预测正例的真实正例占所有真实正例的比例

(二)PR曲线评测指标
在混淆矩阵的基础上得到z正确率Precision和召回率,就可以构造一个PR曲线,用来同时评估正确率和召回率
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
这就是PR曲线,P是正确率Precision,R是召回率Recall
这里需要注意,构造一个高正确率和高召回率的分类器,但是很难保证两全其美,一般情况下正确率高、召回率就低,召回率高、正确率就低。
在实际工作中主要看业务偏向于正确率还是召回率。如:在推荐场景,检索索引库的时候侧重于召回率,排序的时候侧重于正确率了。
但是在疾病监测,反垃圾的场景侧重于正确率
完美的PR的曲线是上面上面一条直线,一般做不到,一般的PR曲线都是一条抛物线
效果最差的PR曲线就是正确率和召回率各占百分之五

(三)ROC曲线评测指标
ROC曲线是一个二维的曲线图:
纵轴:真阳率:TP/(TP+FN),即召回率Recall
横轴:假阳率:FP/(FP+FN)
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
ROC曲线图
通过不同阈值下的计算得到真阳率和假阳率,就可以绘制ROC曲线图,参数值分的越细,曲线就会越平滑

(四)AUC曲线评测指标:
通过ROC曲线可以得到AUC曲线
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
AUC的值就是ROC曲线下的面积,如图上所示
直接计算ROC曲线下的面积获取AUC的值会比较麻烦,我们换一种思路来计算:负样本排在正样本前面的概率
例如:
对物品A打分0.1,物品B打分0.9
物品A排在物品B前认为是正样本,反之为负样本
即(A,B) :+1,(B,A) :-1
下图是我们的样本acu_raw数据
分类预测:混淆矩阵、PR曲线、ROC曲线、AUC
第一列代表真是标签是正例还是负例,第二列是模型打分
使用awk命令就可以求解AUC的值
cat auc.raw | sort -t\tk2g|awkF\t(1==-1){++x,a+=y;}($1==1){++y;}END{print 1.0-a/(x*y)}’
参数解释:
x*y:正负样本pair对
a:错误的pair对
a/x*y:错误的概率
1-a/x*y:正确的概率
注意:AUC只能对二值分类使用