机器学习中分类器的性能评价指标

我们针对一个具体地问题建立了一个机器学习模型以后,怎么去评价这个模型的好坏呢?这就需要用到分类器的几个性能评价指标。下面简单谈一下。

准确率(accuracy)

准确率是最常用的分类性能指标。拿最常见的二分类问题来说,我们的模型无非是想要把正类和负类预测识别出来。在测试集中识别对的数量(不论是把正样本识别为正样本还是把负样本识别为负样本)除以测试集的数据总量就是准确率。在用scikit-learn调用分类器进行分类的时候,模型返回的score值其实就是准确率。

精确率(precision)和召回率(recall)以及F值

精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的样本而不是所有预测正确的样本。它可以由预测正确的正样本数除以模型所有预测为正样本的数目之比来计算出来。表现为预测出是正的里面有多少真正是正的。

而召回率是由预测正确的正样本数目除以测试集中真正的实际正样本数目之比计算得出。表现出所有真正是正样本中分类器能召回多少。

哈哈,是不是晕了?下面盗一张图:
这里写图片描述

精确率 precision = TP / (TP+FP)
召回率 recall = TP / (TP+FN)

还有一个指标是F值,它是精确率和召回率的调和值,如上图。很多推荐系统的评测指标就是用F值的。

ROC曲线以及AUC面积

这货全称叫:受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线)。简单来说就是选两个指标,作为二维坐标的两个轴,然后通过描述在不同阈值下这两个指标的变化,画出一条曲线。

关键是,选哪两个指标呢?

ROC曲线选的两个指标是:

  • 真正类率(true positive rate ,TPR), 计算公式为TPR=TP/(TP+ FN)
  • 假正类率(1-specificity=FPR),计算公式为FPR=FP/(FP+TN)

将真正类率作为Y轴,假正类率作为X轴,然后就可以画出ROC曲线。ROC曲线与X坐标轴所围成的面积叫做AUC面积,这个面积也可以作为分类器的性能评价指标。面积越大,分类器性能越好。

P-R曲线

P-R曲线的P就是精确率,R就是召回率。用P作为横坐标,R作为纵坐标,就可以画出P-R曲线。那么P-R曲线和ROC曲线有什么关系呢?

当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般,还需要继续努力啊。解释起来也简单,假设就1个正例,100个负例,那么基本上TPR可能一直维持在100左右,然后突然降到0.

参考文献:http://www.zhizhihu.com/html/y2012/4076.html

### 机器学习分类模型评价指标 #### 准确率 准确率是指被正确分类的样本占总样本的比例。尽管准确率是一个直观的理解方式,但在类别布不均衡的情况下可能具有误导性[^2]。 #### 精准率(Precision) 精准率衡量的是预测为正类的结果中有多少是真正的正类实例。高精度意味着当模型做出正面预测时,这些预测大多数都是正确的。这反映了对于每一个预测出来的正例有多少是真的正例[^1]。 ```python from sklearn.metrics import precision_score precision = precision_score(y_true, y_pred, average='binary') print(f'Precision: {precision}') ``` #### 召回率(Recall) 召回率表示实际为正类的样本中有多大比例被成功识别出来。在某些应用场景下,比如医疗诊断或欺诈检测,较高的召回率往往更为重要,因为它能更好地捕捉到所有的潜在阳性案例[^3]。 ```python recall = recall_score(y_true, y_pred, average='binary') print(f'Recall: {recall}') ``` #### F1数 F1值是对精确率和召回率的一种加权平均,旨在平衡两者之间的关系。由于这两个度量通常是相互冲突的,在优化其中一个的同时可能会损害另一个的表现;因此,采用F1可以提供更全面的学习器性能评估标准。 ```python f1 = f1_score(y_true, y_pred, average='binary') print(f'F1 Score: {f1}') ``` #### ROC曲线与AUC值 接收者操作特性(ROC)曲线展示了不同阈值下的真阳性和假阳性比率的变化情况。曲线下面积(AUC)则量化了整个二元分类过程中的整体表现,理想的AUC接近于1,表明该分类器能够很好地区两个类别[^4]。 ```python import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc fpr, tpr, _ = roc_curve(y_test, y_scores) roc_auc = auc(fpr, tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值