1.PR曲线
1.1什么是PR曲线
PR 曲线(Precision-Recall Curve,精确率-召回率曲线)是一个用来评估二分类模型性能的重要工具,特别适合在数据集类别不平衡(positive 类较少)的时候使用。
主要参数有:
Precision(精确率):预测为正的样本中,有多少是真的正的

Recall(召回率):所有真正正的样本中,有多少被正确预测出来了

-
TP = True Positive(真正例)
-
FP = False Positive(假正例)
-
FN = False Negative(假负例)
曲线示例:

注:当 recall 很高时,precision 往往下降,AP表示该曲线下的面积为0.49
1.2PR曲线绘制步骤
步骤一:准备数据
在绘制任何曲线之前,要准备好一组横轴(x)与纵轴(y)对应的数据。这些数据可以是从数学函数生成的(如 y = sin(x)),也可以是实验测量结果、模型预测分数、或从 CSV 文件中读取的真实世界数据。确保这两个数组具有相同的长度,并一一对应
步骤二:选择绘图库
以 Python 为例,最常用的库是 matplotlib,主要是简单灵活,适合绘制各类曲线图。对于更高级的可视化,也可以使用 seaborn(适合统计图)或 plotly(支持交互式图表)
步骤三:绘制曲线
使用绘图库的 plot() 函数将数据画出来。例如:plt.plot(x, y)。可以通过参数控制线条颜色、线型、标签等:plt.plot(x, y, color='red', linestyle='--', label='Sample Curve')。这一步的核心是将数据映射到图表的坐标系统中
步骤四:美化图表
为了让图表更具可读性,通常会加入坐标轴标签(plt.xlabel() / plt.ylabel())、图例(plt.legend())、标题(plt.title())和网格线(plt.grid(True))。如果为了让图表展示得更专业,还可以控制字体大小、线宽、颜色主题等视觉样式
步骤五:显示或保存图像
绘制完成后,可以使用 plt.show() 将图像直接显示在屏幕上。如果要将图保存为图片文件,可以使用 plt.savefig('filename.png')。建议在保存之前先使用 plt.tight_layout() 自动优化布局,避免标签被遮挡
1.3PR曲线绘制实例
(1)计算 Precision(精确率)和 Recall(召回率):
precision, recall, _ = precision_recall_curve(y, y_scores)
(2)计算AP(平均精度):
avg_precision = average_precision_score(y, y_scores)
(3)绘制 PR 曲线:
plt.subplot(1, 2, 2)
plt.plot(recall, precision, color='blue', lw=2, label='PR curve (AP = %0.2f)' % avg_precision)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve (KNN + Cross-Validation)')
plt.legend(loc="lower left")
1.4绘制出的图像效果展示

2.ROC曲线
2.1什么是ROC曲线
ROC 曲线(Receiver Operating Characteristic Curve)是一个用于评估二分类模型性能的工具,特别是在面对不平衡数据集时非常有用。它通过展示不同的分类阈值下模型的表现,帮助我们理解模型的 敏感度(召回率)和 特异度(假正例率)之间的权衡
主要的参数有:
假正例率(False Positive Rate, FPR):FP(假正例)是将负类预测为正类的样本数,TN(真负例)是正确预测为负类的样本数

真正例率(True Positive Rate, TPR),也叫做 召回率(Recall):TP(真正例)是正确预测为正类的样本数,FN(假负例)是将正类预测为负类的样本数

曲线示例:

2.2ROC曲线绘制步骤
步骤 1:准备数据
确保有一个二分类问题的数据集。数据集应该包括样本的特征(输入数据)和对应的标签(真实类别)。将数据集分为训练集和测试集。
步骤 2:训练模型
选择一个适合二分类的模型(如逻辑回归、支持向量机、决策树等)并在训练集上进行训练。
步骤 3:预测概率
使用训练好的模型在测试集上进行预测,获取每个样本属于正类(或负类)的概率。绘制 ROC 曲线时,关键是利用这些概率,而不是硬预测的类别标签。
步骤 4:计算 ROC 曲线数据
通过不同的阈值来计算模型的 假正例率(FPR) 和 真正例率(TPR)。随着阈值的变化,FPR 和 TPR 会发生变化。你可以根据这些变化绘制 ROC 曲线。
步骤 5:计算 AUC
AUC(Area Under the Curve)是 ROC 曲线下的面积,它用于衡量模型的整体分类性能。AUC 值越接近 1,模型的性能越好。
步骤 6:绘制 ROC 曲线
在图表中,横轴是 假正例率(FPR),纵轴是 真正例率(TPR)。理想的 ROC 曲线应该从坐标原点(0,0)开始,迅速上升并接近坐标点(0,1),显示出模型能够区分正负类的能力。
2.3绘制ROC曲线实例
(1)计算 ROC 曲线数据:
fpr, tpr, _ = roc_curve(y, y_scores)
(2)计算 AUC:
roc_auc = auc(fpr, tpr)
(3)绘制曲线:
plt.subplot(1, 2, 1)
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve (KNN + Cross-Validation)')
plt.legend(loc="lower right")
2.4绘制出的图像效果展示:

上述两个曲线生成的前置条件:
1.所使用的库:
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_predict, StratifiedKFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score
2. 生成数据集:
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=4)
3.定义 KNN 模型:
knn = KNeighborsClassifier(n_neighbors=5)
4.使用 StratifiedKFold 进行交叉验证预测概率
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
y_scores = cross_val_predict(knn, X, y, cv=cv, method='predict_proba')[:, 1]
目的:
-
保证类别分布的平衡,尤其适用于类别不平衡问题。
-
评估模型的泛化能力,提供更可靠的性能评估。
-
预测概率而非硬分类,为后续的性能评估(如 ROC 和 PR 曲线)提供更丰富的信息。
-
提供更精确的模型评估,帮助调节分类阈值,优化模型性能。
总结:
-
ROC 曲线 更适用于类别均衡的情况,能够全面地反映模型对正负类的区分能力;
-
PR 曲线 更适用于类别不平衡的情况,尤其是在 正类样本稀缺 时,能够更好地衡量模型在正类上的表现。
PR曲线和ROC曲线的优点和缺点:
PR曲线的优缺点
优点:
PR 曲线非常适合正类样本较少,类别不平衡的情况。它专注于评估模型对正类的预测能力,避免了负类样本对评估结果的干扰。当正类样本稀缺时,PR 曲线能够提供更加有用的性能评估。PR 曲线通过精确率和召回率,直接描述了模型在正类样本上的表现,尤其适合关心正类识别能力的任务,如垃圾邮件分类和疾病诊断。AP(Average Precision)值能够综合多个阈值下的精度和召回率,提供一个全局的性能评估,帮助我们总结模型在不同阈值下的表现。此外,PR 曲线可以帮助根据精确率和召回率的权衡,调整分类阈值,优化模型在正类样本上的表现。
缺点:
PR 曲线不适用于类别平衡的数据集。当正负类样本比例较均衡时,PR 曲线可能过于关注正类,忽略了负类样本的表现。在这种情况下,ROC 曲线可能会更加全面地展示模型性能。PR 曲线只关注正类样本的预测效果,忽略了负类的分类效果,这在负类同样重要的任务中会导致性能评估不足。PR 曲线的 AUC(AP)与 ROC 曲线的 AUC 不完全等价,因此不同任务中的 PR 曲线很难与其他任务的 ROC 曲线直接比较。PR 曲线也较容易受到过拟合的影响,特别是在正类样本稀少的情况下,模型可能在训练数据上表现得很好,但在测试集上效果不好。
ROC曲线的优缺点
优点:
ROC 曲线非常适合正负样本比例相对平衡的情况。当正负类样本比例接近时,ROC 曲线能够较好地展示模型的性能,更好地理解假正例率(FPR)和真正例率(TPR)之间的权衡。由于假正例率的计算是基于负类样本,ROC 曲线通常不会受到负类样本占主导地位的影响。它通过预测概率,在不同阈值下展示模型的表现,帮助我们了解模型在各个分类阈值下的能力。此外,AUC(曲线下面积)值是 ROC 曲线的核心指标,越接近 1,说明模型性能越好,AUC 可以作为不同模型的性能比较标准。
缺点:
ROC 曲线在极度不平衡的类别分布中可能给出过于乐观的评估。因为负类样本占主导地位,即使模型在正类的预测上表现不佳,AUC 值也可能依然较高。这时,ROC 曲线无法有效评估模型在正类上的表现。ROC 曲线只关注假正例率,因此忽视了正类样本的影响。当数据集中负类样本远大于正类时,ROC 曲线无法准确衡量模型对正类样本的识别能力。此外,ROC 曲线并不适用于正负类样本差异极大的情况,这时 PR 曲线可能提供更有效的评估。

4404

被折叠的 条评论
为什么被折叠?



