Sklearn之分类器性能评估

本文介绍了如何使用sklearn库评估分类器性能,包括准确率、精度、召回率、F1分数、P-R曲线、ROC曲线及AUC。强调在处理偏斜类别时,准确率可能不客观,而混淆矩阵、P-R曲线和ROC曲线能提供更全面的评估。同时,文章详细说明了如何计算和绘制这些指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分类器的性能评估

在回归任务中,性能评估的方式较为简单,最常用的性能度量方式为均方误差(MSE)

但是评估分类器就要比评估回归模型要困难很多,我们通常采用以下指标对分类器进行性能评估:
1、准确率、错误率(在评估倾斜类时,不是一个好指标)
2、精度(precision)、召回率(recall)、F1
3、ROC曲线、AUC

在进行性能评估时,依旧和回归模型一样采用交叉验证。
下面我们依次介绍如何在sklearn中使用上述三类指标进行分类器性能评估。

1、准确率

通常采用cross_value_score()这个函数,具体使用方法如下

from sklearn.model_selection import cross_val_score
cross_val_score(estimator, train_x, train_y, cv, scoring="accuracy")
其中,estimator即为我们要评估的分类器
cv为整数时,默认为KFold或StratifiedKFold。我们也可以自己设计交叉验证模式,具体见以前的博客。

但是准确率在处理偏斜类时,性能指标不客观。

混淆矩阵
评估分类器性能的更好方法就是混淆矩阵。

要计算混淆矩阵,需要先有一组预测才能将其与实际目标进行比较。当然可以通过测试集来进行预测,但是现在先不要动它(测试集最好留到项目最后,准备启动分类器时再使用)。
此时我们可以用cross_val_predict()来代替。它和cross_val_score()不一样,它不是返回分数,而是返回每条样本作为cv中的测试集时,对应的模型对于该样本的预测结果。这就要求使用的cv策略能保证每一条样本都有机会作为测试数据,且不会重复,否则会报异常。
具体使用如下:


                
### sklearn中用于分类任务的性能评估指标 在机器学习中,模型的性能评估是非常重要的一个环节。`sklearn` 提供了多种性能评估指标来衡量分类器的表现,这些指标可以适用于二分类和多分类任务。以下是常见的分类任务性能评估指标及其用法: #### 1. 准确率 (Accuracy) 准确率是衡量模型预测正确的样本占总样本的比例。公式如下: \[ \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{FP} + \text{FN} + \text{TN}} \] 其中,TP 表示真正例,TN 表示真负例,FP 表示假正例,FN 表示假负例。 ```python from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_true, y_pred) # 计算准确率 ``` #### 2. 精确率 (Precision) 精确率表示模型预测为正类的样本中有多少是真正的正类。公式如下: \[ \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} \] ```python from sklearn.metrics import precision_score precision = precision_score(y_true, y_pred, average='binary') # 二分类 ``` 对于多分类任务,可以通过设置 `average` 参数为 `'micro'`, `'macro'`, 或 `'weighted'` 来计算[^1]。 #### 3. 召回率 (Recall) 召回率表示实际为正类的样本中有多少被模型正确预测为正类。公式如下: \[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} \] ```python from sklearn.metrics import recall_score recall = recall_score(y_true, y_pred, average='binary') # 二分类 ``` 同样,多分类任务需要指定 `average` 参数[^1]。 #### 4. F1 分数 (F1 Score) F1 分数是精确率和召回率的调和平均值,综合考虑了两者的表现。公式如下: \[ \text{F1} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} \] ```python from sklearn.metrics import f1_score f1 = f1_score(y_true, y_pred, average='binary') # 二分类 ``` 对于多分类任务,`average` 参数同样适用[^2]。 #### 5. ROC 曲线下的面积 (AUC-ROC) AUC-ROC 是一种衡量分类器区分能力的指标,尤其适合不平衡数据集。它基于 ROC 曲线,曲线下的面积越大,模型表现越好。 ```python from sklearn.metrics import roc_auc_score auc = roc_auc_score(y_true, y_proba) # 需要概率估计 ``` 注意:`roc_auc_score` 需要输入模型输出的概率估计值,而不是类别标签[^2]。 #### 6. 混淆矩阵 (Confusion Matrix) 混淆矩阵是一个表格,用于展示模型预测结果与真实标签之间的关系。 ```python from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_true, y_pred) ``` #### 7. 对数损失 (Log Loss) 对数损失衡量了模型预测概率分布与真实分布之间的差异,常用于概率预测任务。 ```python from sklearn.metrics import log_loss loss = log_loss(y_true, y_proba) ``` ### 示例代码 以下是一个完整的代码示例,展示如何使用上述指标评估分类器性能: ```python from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, log_loss # 假设这是真实的标签和预测的结果 y_true = [0, 1, 1, 0, 1] y_pred = [0, 1, 0, 0, 1] y_proba = [0.1, 0.9, 0.4, 0.2, 0.8] # 计算各项指标 accuracy = accuracy_score(y_true, y_pred) precision = precision_score(y_true, y_pred, average='binary') recall = recall_score(y_true, y_pred, average='binary') f1 = f1_score(y_true, y_pred, average='binary') auc = roc_auc_score(y_true, y_proba) loss = log_loss(y_true, y_proba) print(f"Accuracy: {accuracy}") print(f"Precision: {precision}") print(f"Recall: {recall}") print(f"F1 Score: {f1}") print(f"AUC-ROC: {auc}") print(f"Log Loss: {loss}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值