如何选择合适的模型评估指标?AUC、精准度、召回率、F1值都是什么?如何计算?有什么优缺点?

本文阅读 6 分钟
首页 知识库 正文

TP:将正类预测为正类数

FN:将正类预测为负类数

FP:将负类预测为正类数

TN:将负类预测为负类数

分类任务指标

Accuracy(准确率):分类正确的样本占总样本个数的比例 $$ Accuracy = \frac{n_{correct}}{n_{total}} $$

缺点:不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。
解决:可以使用每个类别下的样本准确率的算术平均(平均准确率)作为模型评估的指标。
Precision(精确率):分类正确的正样本个数占分类器判定为正样本的样本个数的比例 $$ Precision = \frac{TP}{TP+FP} $$ Recall(召回率):分类正确的正样本数占真正的正样本个数的比例 $$ Recall = \frac{TP}{TP+FN} $$ F1-score:precision和recall的调和平均值;当精确率和召回率都高时,F1值也会高 $$ {\rm F1} = \frac{2 \times precision \times recall}{precision + recall} $$ 在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用Top N返回结果的Precision和Recall值来衡量排序模型的性能。即认为模型返回的Top N结果就是模型判定的正样本,计算前N个位置的Precision@N和Recall@N。为了综合评估一个排序模型的好坏,不仅要看模型在不同Top N下的Precision@N和Recall@N,而且最好画出模型的P-R曲线。P-R曲线的横轴是Recall,纵轴是Precision。

ROC:横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR) $$ FPR = \frac{FP}{N} \ TPR = \frac{TP}{P} $$ 其中P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被预测为正样本的个数。

【如何绘制ROC曲线】通过不断移动分类器的“截断点”来生成曲线上的一组关键点。在二分类问题中,模型输出一般是预测样本为正例的概率,在输出最终的正例负例之前,我们需要制定一个阈值。大于该阈值的样本判定为正例,小于该阈值的样本判定为负例。通过动态调整截断点,绘制每个截断点对应位置,再连接所有点得到最终的ROC曲线。

AUC:ROC曲线下的面积大小。计算AUC值只要沿着ROC横轴做积分就可以。AUC取值一般在0.5~1之间。AUC越大,分类性能越好。AUC表示预测的正例排在负例前面的概率。

指标想表达的含义,简单来说其实就是随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率
随机抽出一对样本
AUC为0.5表明对正例和负例没有区分能力,对于不论真实类别是1还是0,分类器预测为1的概率是相等的。

我们希望分类器达到的效果:对于真实类别为1的样本,分类器预测为1的概率(TPR)要大于真实类别为0而预测类别为1的概率(FPR),即y>x

AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。

思路:1.首先对预测值进行排序,排序的方式用了python自带的函数sorted,详见注释。

   2.对所有样本按照预测值从小到大标记rank,rank其实就是index+1,index是排序后的sorted_pred数组中的索引

   3.将所有正样本的rank相加,遇到预测值相等的情况,不管样本的正负性,对rank要取平均值再相加

​ 4.将rank相加的和减去正样本排在正样本之后的情况,再除以总的组合数,得到auc

回归任务指标

RMSE:计算预测值和实际值的平均误差 $$ {\rm RMSE} = \sqrt{\frac{\sum_{i=1}^n (y_i-\hat{y}_i)^2}{n}} $$

解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

什么是结构误差和经验误差?训练模型的时候如何判断已经达到最优?
« 上一篇 07-11
什么是混淆矩阵?
下一篇 » 07-11

发表评论