当前位置:首页 >探索 >分类器性能评估(混淆矩阵、PR曲线、ROC曲线) 估混提高精确率会降低召回率

分类器性能评估(混淆矩阵、PR曲线、ROC曲线) 估混提高精确率会降低召回率

2024-06-30 21:39:30 [百科] 来源:避面尹邢网

分类器性能评估(混淆矩阵、分类PR曲线、器性R曲曲线ROC曲线)

作者:Bryce 人工智能 机器学习 精确率和召回率之间存在一种折中关系,估混提高精确率会降低召回率。淆矩线到底需要较高的分类精确率还是较高的召回率,不能一概而论,器性R曲曲线具体场景具体分析。估混需要找得对就需要高的淆矩线精确率,也就是分类想要的一定是好的;不想把想要的漏掉太多,就需要较高的器性R曲曲线召回率。

大家好,估混我是淆矩线Bryce。

这次和大家分享机器学习涉及到的分类内容——分类器性能评估,包括准确率、器性R曲曲线精确率、估混召回率、PR曲线、ROC曲线等。

分类器性能评估(混淆矩阵、PR曲线、ROC曲线) 估混提高精确率会降低召回率

一、准确率(Accuracy)

准确率并不是一个很好的分类器性能指标,尤其是当处理的数据集存在偏差时(一些类比其他类多得多)。比如有9个苹果和1个香蕉,那我猜测10个都不是香蕉的准确率也高达90%。

分类器性能评估(混淆矩阵、PR曲线、ROC曲线) 估混提高精确率会降低召回率

在Python中,准确率指标可以使用cross_val_score()函数评估,同时使用K折交叉验证。具体形式如下,其中,cv=3表示3折。

分类器性能评估(混淆矩阵、PR曲线、ROC曲线) 估混提高精确率会降低召回率

from sklearn.model_selection import cross_val_scorecross_val_score(sgd_clf, X_train, y_train_5, cv=3, scoring='accuracy')

二、混淆矩阵

图片

如上图所示,混淆矩阵每一行代表一个实际的结果,每一列代表一个预测的结果。分别有TP、FN、FP、TN四种结果,有Accuracy(准确率)、Precision(精确率)、Sensitivity(召回率或灵敏度)、Specificity(特异度)和Negative Predictive Value(反例预测率)5种衡量指标,它们的计算公式如上图。

还是以苹果、香蕉举例子(苹果为正例,香蕉为反例):

  • TP:真正例,把苹果认成了苹果;
  • FN:伪反例,把苹果认成了香蕉;
  • FP:伪正例,把香蕉认成了苹果;
  • TN:真反例,把香蕉认成了香蕉。

Accuracy(准确率):不管正负例,预测对的占多少。

Precision(精确率):找了这么多正例,找对了多少。

Sensitivity(召回率):有这么多正例,找出了多少。

在Python中计算混淆矩阵比较简单,如下:

from sklearn.metrics import confusion_matrixconfusion_matrix(y_train, y_train_pred)

其中,y_train表示训练值,y_train_pred表示预测值。

衡量指标中用的比较多的是精确率和召回率,它们的值可以在计算出混淆矩阵后,按照上图公式计算,也可以直接调用对应的函数。

from sklearn.metrics import precision_score, recall_scoreprecision_score(y_train, y_train_pred)recall_score(y_train, y_train_pred)

其中,precision_score表示精确率,recall_score表示召回率。

F1值

F1值结合了精确率和召回率,是它们的调和平均。普通的平均值平等看待所有值,而调和平均会给小的值更大的权重。要想获得一个高的F1值,精确率和召回率要同时高。

图片

from sklearn.metrics import f1_scoref1_score(y_train, y_train_pred)

精确率和召回率之间存在一种折中关系,提高精确率会降低召回率。到底需要较高的精确率还是较高的召回率,不能一概而论,具体场景具体分析。需要找得对就需要高的精确率,也就是想要的一定是好的;不想把想要的漏掉太多,就需要较高的召回率。

某模型的精确率、召回率与阈值的关系曲线如下,横坐标表示算法判断的阈值(大于阈值为正,否则为负):

from sklearn.metrics import precision_recall_curveprecisions, recalls, thresholds = precision_recall_curve(y_train, y_scores) # y_scores是决策分数,不是预测值

图片

从图中就可以看出精确率和召回率之间的博弈关系。

仔细看我们会发现,召回率曲线比较平滑,而精确率曲线在性能较高时会有波动,这表示提高阈值,精确率并不一定会提高。

精确率和召回率之间的关系曲线(PR曲线)如下:

图片

三、ROC曲线

ROC曲线横坐标为FPR(伪正例率),纵坐标为TPR(真正例率,也即召回率),其中FPR=1-TNR,TNR就是特异性。

from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(y_train, y_scores)

图片

一个评估分类器好坏的方法是:计算ROC曲线下的面积,roc_auc_score()可实现。面积越大,性能越好,从图来看,就是更靠近左上角。(PR曲线应该尽可能的靠近右上角)

from sklearn.metrics import roc_auc_scoreroc_auc_score(y_train, y_scores)

PR曲线还是ROC曲线?

当正例非常少或者你更关注伪正例(FP)而不是伪反例(FN)时,你应该选择PR曲线, 反之则是ROC曲线。

本文转载自微信公众号「且听数据说」,作者「Bryce」,可以通过以下二维码关注。

转载本文请联系「且听数据说」公众号。


责任编辑:武晓燕 来源: 且听数据说 分类器ROC曲线混淆矩阵

(责任编辑:百科)

    推荐文章
    热点阅读