基于ROC曲线和PR曲线的分类模型性能评估

一、关于ROC曲线和PR曲线

        ROC曲线和PR曲线是两种常用的评估二分类模型性能的方法,它们都可以通过不同的分类阈值来绘制出一条曲线,反映模型的灵敏度和特异度。ROC曲线以假正例率(FPR)为横轴,真正例率(TPR)为纵轴,PR曲线以召回率(Recall)为横轴,精确率(Precision)为纵轴。ROC曲线和PR曲线之间有一定的联系,可以通过混淆矩阵来互相转换。一般来说,ROC曲线越靠近左上角,PR曲线越靠近右上角,表示模型性能越好。ROC曲线下的面积(AUC)也是一个常用的评估指标,其值越大表示模型性能越好。

二、ROC曲线的概念、计算与绘制步骤及评估指标

        ROC曲线是一种用来评估二分类模型性能的图形工具,它反映了模型在不同的分类阈值下的灵敏度和特异度。ROC曲线以假正例率(FPR)为横轴,真正例率(TPR)为纵轴,每个点对应一个分类阈值。ROC曲线越靠近左上角,表示模型性能越好。

        ROC曲线的计算方法是根据模型输出的预测概率或置信度来确定分类阈值,然后根据混淆矩阵来计算FPR和TPR。FPR等于假正例数除以实际负例数,TPR等于真正例数除以实际正例数。FPR和TPR的取值范围都是0到1。

        ROC曲线的绘制步骤为:先将预测概率或置信度从高到低排序,然后从0到1逐渐增加分类阈值,对应地计算FPR和TPR,并将它们作为坐标画出点。最后将所有的点连成一条曲线,就得到了ROC曲线。

        ROC曲线的评估指标是ROC曲线下的面积(AUC),它表示模型对正负样本的区分能力。AUC的取值范围是0.5到1,0.5表示模型没有区分能力,相当于随机猜测,1表示模型完美区分正负样本,没有任何错误。一般来说,AUC越大,表示模型性能越好。

三、PR曲线的概念、计算与绘制步骤及评估指标

        PR曲线是另一种用来评估二分类模型性能的图形工具,它反映了模型在不同的分类阈值下的精确率和召回率。PR曲线以召回率(Recall)为横轴,精确率(Precision)为纵轴,每个点对应一个分类阈值。PR曲线越靠近右上角,表示模型性能越好。

        PR曲线的计算方法也是根据模型输出的预测概率或置信度来确定分类阈值,然后根据混淆矩阵来计算Precision和Recall。Precision等于真正例数除以预测正例数,Recall等于真正例数除以实际正例数。Precision和Recall的取值范围都是0到1。

        PR曲线的绘制步骤也是先将预测概率或置信度从高到低排序,然后从0到1逐渐增加分类阈值,对应地计算Precision和Recall,并将它们作为坐标画出点。最后将所有的点连成一条曲线,就得到了PR曲线。

        PR曲线没有一个统一的评估指标,但有一些常用的方法,例如平均精确率(AP),它表示PR曲线下方与横轴之间的面积;或者F1分数(F1-score),它表示Precision和Recall的调和平均数。一般来说,AP或者F1-score越大,表示模型性能越好。

四、代码实现

# 导入模块
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score
import numpy as np
import matplotlib.pyplot as plt
from imblearn.over_sampling import SMOTE # 导入过采样模块

# 加载数据集
digits = load_digits()
x_data = digits.data
y_data = digits.target

# 选择目标类别
target_class = 0 # 选择数字0作为正类

# 转换为二值标签
y_data = np.where(y_data == target_class, 1, 0) # 将数字0标记为1,其他数字标记为0

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)

# 使用SMOTE对训练集进行过采样,使各类别数量平衡
sm = SMOTE(random_state=42)
x_train_res, y_train_res = sm.fit_resample(x_train, y_train)

# 创建KNN对象
knn = KNeighborsClassifier(n_neighbors=3) # 可以调整邻居数

# 训练模型
knn.fit(x_train_res, y_train_res) # 使用过采样后的训练集

# 预测概率或得分
y_score = knn.predict_proba(x_test)[:, 1] # 获取每个样本属于正类的概率或得分

# 计算roc曲线和auc值
fpr, tpr, thresholds = roc_curve(y_test, y_score) # 计算假正率,真正率和阈值
roc_auc = auc(fpr, tpr) # 计算auc值

# 计算pr曲线和ap值
precision, recall, thresholds = precision_recall_curve(y_test, y_score) # 计算精确率,召回率和阈值
average_precision = average_precision_score(y_test, y_score) # 计算平均精确率

# 绘制roc曲线和pr曲线
plt.figure(figsize=(10, 5)) # 设置画布大小

plt.subplot(1, 2, 1) # 设置第一个子图
plt.plot(fpr, tpr, color='darkorange', label='ROC curve (area = %0.2f)' % roc_auc) # 绘制roc曲线
plt.plot([0, 1], [0, 1], color='navy', linestyle='--') # 绘制对角线
plt.xlim([0.0, 1.0]) # 设置x轴范围
plt.ylim([0.0, 1.05]) # 设置y轴范围
plt.xlabel('False Positive Rate') # 设置x轴标签
plt.ylabel('True Positive Rate') # 设置y轴标签
plt.title('Receiver operating characteristic example') # 设置标题
plt.legend(loc="lower right") # 设置图例位置

plt.subplot(1, 2, 2) # 设置第二个子图
plt.plot(recall, precision, color='darkorange', label='PR curve (AP = %0.2f)' % average_precision) # 绘制pr曲线
plt.xlim([0.0, 1.0]) # 设置x轴范围
plt.ylim([0.0, 1.05]) # 设置y轴范围
plt.xlabel('Recall') # 设置x轴标签
plt.ylabel('Precision') # 设置y轴标签
plt.title('Precision-Recall curve example') # 设置标题
plt.legend(loc="lower left") # 设置图例位置

plt.show() # 显示图像

五、ROC曲线和PR曲线的比较分析

        ROC曲线和PR曲线都可以用来评估二分类模型的性能,但它们有一些区别和优劣。ROC曲线的优点是不受正负样本比例的影响,可以在不同的数据集上进行比较;缺点是当正负样本极度不平衡时,可能会高估模型的性能,忽略了少数类的重要性。PR曲线的优点是更能反映少数类的性能,更适合处理正负样本不平衡的问题;缺点是受正负样本比例的影响,不能在不同的数据集上进行比较。因此,在选择ROC曲线或者PR曲线时,需要根据具体的问题和数据来决定。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROC曲线(Receiver Operating Characteristic Curve)和PR曲线Precision-Recall Curve)是在二分类问题中常用的评估模型性能的工具,它们有一些区别和特点。 1. 目标不同: - ROC曲线关注的是真正例率(True Positive Rate,即召回率)与假正例率(False Positive Rate)之间的权衡。ROC曲线展示了在不同阈值下,分类器的敏感性和特异性之间的关系。 - PR曲线则关注的是精确率(Precision)与召回率(Recall)之间的权衡。PR曲线展示了在不同阈值下,分类器的预测准确性和查全率之间的关系。 2. 数据分布不平衡时的表现: - ROC曲线对于数据分布不平衡的情况下相对稳定,因为它使用了假正例率作为横轴,而假正例率不受真实负例数量的影响。 - PR曲线在数据分布不平衡时更能准确地反映分类器的性能,因为它使用了精确率作为纵轴,能够展示在正例中的正确预测比例。 3. 敏感性不同: - ROC曲线能够展示分类器在整个概率范围内的性能,对于不同的阈值都可以进行评估。 - PR曲线则更关注分类器在高概率(高置信度)区域的性能,对于低概率的预测结果较为敏感。 总而言之,ROC曲线主要用于评估分类器的整体性能,特别是在样本不平衡的情况下,而PR曲线则更适用于评估分类器在正例预测方面的性能。根据具体问题和需求,选择合适的曲线进行模型性能评估

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值