文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 15:29

关注

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

一、准确率(Accuracy)

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

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

from sklearn.model_selection import cross_val_score
cross_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种衡量指标,它们的计算公式如上图。

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

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

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

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

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

from sklearn.metrics import confusion_matrix
confusion_matrix(y_train, y_train_pred)

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

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

from sklearn.metrics import precision_score, recall_score
precision_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_score
f1_score(y_train, y_train_pred)

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

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

from sklearn.metrics import precision_recall_curve
precisions, 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_curve
fpr, tpr, thresholds = roc_curve(y_train, y_scores)

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

from sklearn.metrics import roc_auc_score
roc_auc_score(y_train, y_scores)

PR曲线还是ROC曲线?

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

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

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


来源:且听数据说内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯