ROC与PR曲线


前言

模型评估是在机器学习中,对训练好的模型性能进行评估的一种方法。它是模型开发过程中不可或缺的一部分,因为它可以帮助我们发现哪种模型能够最好地表达数据,以及所选模型在未来工作的性能如何。模型评估的方法有很多,例如准确率、召回率、F1分数、AUC-ROC等,通过这些方法,我们可以更全面地了解模型的性能,从而做出更好的决策。

一、常见的模型分类指标

1.混淆矩阵

混淆矩阵(Confusion Matrix)是一种在机器学习中常用的工具,用于可视化分类模型的性能。它通过将实际类别和预测类别进行比较,展示模型在分类任务中的表现。

混淆矩阵通常以矩阵的形式呈现,其中行表示实际类别,列表示预测类别。矩阵中的每个单元格表示实际类别和预测类别的对应关系

预测结果

真实结果

1

0

1

真正例(TP)

伪反例(FN)

0

伪正例(FP)

真反例(TN)

1. True Positive (TP):真正类。表示模型正确地将正类样本预测为正类。即模型识别的结果与样本的真实归属类别一致。

2. False Negative (FN):假负类。也称为漏报,表示模型错误地将正类样本预测为负类。即模型没有识别出样本的真实正类属性。

3. False Positive (FP):假正类。也称为误报,表示模型错误地将负类样本预测为正类。即模型错误地将样本分类到了正类。

4. True Negative (TN):真负类。表示模型正确地将负类样本预测为负类。即模型识别的结果与样本的真实归属类别一致。

通过观察混淆矩阵,可以了解模型在各种类别上的表现,包括准确率、召回率、精确率、F1分数等指标。这些指标可以帮助我们评估模型的性能,并找出需要改进的地方。

2. 准确率(Accuracy)

         准确率是指:模型正确预测的样例(真正例 + 真反例)占样本总数的比例。对于二类问题,准确率的计算公式如下:

Accuracy=\frac{TP+TN}{TP+FP+TN+FN}

3. 精确率(Precision)

       精确率是指预测为正例的样本中的真正正例的比例。对于二类问题,精确率的计算公式如下:

        Precision=\frac{TP}{TP+FP}

4. 召回率(Recall)

   召回率(Recall)是指预测为正例的真实正例占所有真实正例的比例。对于二类问题,召回率的计算公式如下:

Recall=\frac{TP}{TP+FN}

5. F1分数(F1 Score)

 F1分数(F1 Score)是一个评估分类模型性能的指标,它同时考虑了模型的精确率和召回率。F1分数的计算公式如下:

 F1=2*\frac{Precision*Recall}{Precision+Recall}

        F1分数的值范围在0到1之间,1表示模型在这两个指标上都达到了完美水平。F1分数综合考虑了精确率和召回率,使得模型在两个指标上达到平衡。因此它可以作为很好的性能评估指标,尤其是在类别不平衡的数据集上。

6.ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型的性能的图形化工具。ROC曲线显示了在不同阈值下真正例率(True Positive Rate,又称召回率)与假正例率(False Positive Rate)之间的关系。

- 真正例率(True Positive Rate, TPR)又称召回率(Recall):TPR = TP / (TP + FN),表示正样本中被分类器正确识别为正类别的比例。
  
-假正例率(False Positive Rate, FPR):FPR = FP / (FP + TN),表示负样本中被错误分类为正类别的比例。

ROC曲线的横轴是FPR,纵轴是TPR,每个点代表在不同阈值下分类器的性能。具体绘制方法是,从大到小改变分类器的预测概率阈值,计算相应的TPR和FPR,并将这些点连接起来形成曲线。

ROC曲线的优劣可以通过曲线下面积(Area Under the Curve,AUC)来进行评估。AUC的取值范围在0到1之间,AUC值越接近1,表示分类器的性能越好,即在所有可能的阈值下,正例排在负例前面的概率更高。

ROC曲线通常用于评估模型在不同类别之间的性能,并且相对于PR曲线更适用于数据分布不平衡的情况。通过分析ROC曲线,我们能够更好地了解模型在不同阈值下的表现,并选择最适合应用场景的模型。

7.PR曲线

PR曲线(Precision-Recall Curve)是用于评估分类器在不同阈值下的性能的一种图形化表示方法。PR曲线显示了不同阈值下的精确率(Precision)和召回率(Recall)之间的关系。

PR曲线的横轴是召回率,纵轴是精确率,每个点表示在不同阈值下分类器的性能。通常情况下,精确率和召回率是相互抵消的,即提高精确率可能会导致召回率下降,反之亦然。因此,在绘制PR曲线时,我们可以根据应用场景的需求来寻找平衡点,例如在精确率和召回率都较高时选择最佳的阈值。

PR曲线通常用于比较不同分类模型的性能,特别适用于不均衡数据集的情况下。在PR曲线中,曲线下方的面积越大,表示分类器的性能越好。通过分析PR曲线,我们可以更好地了解分类器在不同阈值下的表现,并选择最适合应用场景的模型。

二、ROC与PR的应用

1.引入库


from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, ConfusionMatrixDisplay, confusion_matrix,roc_curve, precision_recall_curve
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

# 生成示例数据
import numpy as np

2.读入数据

代码如下(示例):

import numpy as np

X_train = np.random.rand(100, 2)  # 100个样本,每个样本有2个特征
y_train = np.random.randint(2, size=100)  # 100个样本的标签
split_ratio = 0.8  # 测试集的比例
test_size = int(split_ratio * X_train.shape[0])  # 测试集的大小
X_test = X_train[test_size:]  # 测试集的样本
X_train = X_train[:test_size]  # 训练集的样本
y_test = y_train[test_size:]  # 测试集的标签
y_train = y_train[:test_size]  # 训练集的标签

3. 训练模型(knn)

knn = KNeighborsClassifier(k)
    knn.fit(X_train, y_train)

4.绘制Roc 与 Pr 

# 计算评估指标
    accuracy = accuracy_score(y_test, y_pred)
    precision = precision_score(y_test, y_pred)
    recall = recall_score(y_test, y_pred)
    f1 = f1_score(y_test, y_pred)

    print("Accuracy: {}".format(accuracy))
    print("Precision: {}".format(precision))
    print("Recall: {}".format(recall))
    print("F1 Score: {}".format(f1))

    # 计算ROC曲线和AUC
    y_pred_prob = knn.predict_proba(X_test)[:, 1]
    fpr, tpr, _ = roc_curve(y_test, y_pred_prob)
    roc_auc = roc_auc_score(y_test, y_pred_prob)

    # 绘制ROC曲线
    plt.figure()
    plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
    plt.plot([0, 1], [0, 1], color='navy', lw=2, 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('ROC Curve''(k={0:.0f})'.format(k))
    plt.legend(loc="lower right")
    plt.show()

    # 计算PR曲线
    precision, recall, _ = precision_recall_curve(y_test, y_pred_prob)

    # 绘制PR曲线
    plt.figure()
    plt.plot(recall, precision, color='cornflowerblue', lw=2, label='Precision-Recall curve')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.title('Precision-Recall Curve''(k={0:.0f})'.format(k))
    plt.legend(loc="lower left")
    plt.show()

5.效果图

Roc 与 Pr 对比

ROC曲线和PR曲线都是用于评估分类器性能的工具,但它们强调的方面不同。ROC曲线更关注正确分类的假正例的概率,而PR曲线则关注真正例的比例。一般来说,两者在评价模型性能上各有优势。

当取多组k值时Roc

由图可以发现当K值越来越大时,AUC(area)处下降趋势,即分类器的性能在下降,当然也可能是因为本文中所收集的数据是随机数据有关

ps:ROC曲线下的面积,即AUC,是一个常用的分类器性能度量。AUC值越接近1,表示分类器性能越好。


总结

通过本次实验 理解和掌握常见的分类模型评估指标,如准确率、精确率、召回率、F1分数等。 - 学习和使用ROC曲线和PR曲线来评估模型性能。 分析不同k值下的ROC曲线,以观察模型性能的变化。同时实验结果将说明不同评估指标对于模型性能的贡献和限制。 - ROC曲线和PR曲线能够提供模型性能的全面视图,帮助研究者选择最优模型和参数。 - 在实际应用中,应根据具体问题和数据集特性选择合适的评估指标和方法。

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值