机器学习基于Python绘制PR曲线和ROC曲线 | 您所在的位置:网站首页 › python画pr曲线 › 机器学习基于Python绘制PR曲线和ROC曲线 |
一、PR曲线
1、定义及意义:
PR曲线,即Precision-Recall Curve,中文译做精确度-召回率曲线,是一种常用于评估二元分类问题模型表现的工具。 精确度(Precision)和召回率(Recall)是评价二元分类问题模型性能的两个相互关联的指标: 精确度(Precision):对于预测结果是正例的样本,实际上也是正例的概率。较高的精确度意味着模型对于预测出的正例有着较高的准确度。 召回率(Recall):对于所有实际上是正例的样本,被模型预测为正例的概率。较高的召回率意味着模型能够找出所有正例的绝大部分。 PR曲线将这两个指标组合在一起,以精确度(Precision)作为Y轴,召回率(Recall)作为X轴,绘制了对于每个可能的决策阈值,模型的精确度和召回率的表现。这样,PR曲线描绘了模型在精确度和召回率之间权衡的过程,对于模型在不同决策阈值条件下的性能表现提供了全面的视觉表示。 2、源码:# 导入必要的库 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt # 加载数据 data = load_breast_cancer() X = data['data'] y = data['target'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = LogisticRegression(solver='liblinear') model.fit(X_train, y_train) # 得到测试集的预测概率 probs = model.predict_proba(X_test)[:, 1] # 计算PR曲线的数据点 precision, recall, _ = precision_recall_curve(y_test, probs) # 绘制PR曲线 plt.figure(figsize=(8, 6)) plt.plot(recall, precision, marker='.') plt.title('Precision-Recall Curve') plt.xlabel('Recall') plt.ylabel('Precision') plt.grid() plt.show() 3、显示结果ROC曲线,全称为"Receiver Operating Characteristic"曲线,又称为受试者工作特性曲线,是一种用于评估二元分类问题模型性能的图形化工具。 ROC曲线的横坐标是"假正类率"(False Positive Rate, FPR),纵坐标是"真正类率"(True Positive Rate, TPR)。FPR和TPR的定义如下: 真正类率(TPR,也叫召回率):在所有实际为正类的样本中,被正确预测为正类的样本所占的比例; 假正类率(FPR):在所有实际为负类的样本中,被错误预测为正类的样本所占的比例。 ROC曲线是通过在各种分类阈值设定下,绘制出FPR和TPR的变化情况得到的。曲线下的面积(Area under the ROC Curve, AUC)可以用来度量模型的整体性能。AUC值越接近1,代表模型的性能越好;AUC值为0.5则代表模型没有预测能力。 综合来看,ROC曲线不仅可以帮助我们了解模型在不同阈值下的表现,还能量化地评价模型的整体性能。 2、源码:# 导入必要的库 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 加载数据 data = load_breast_cancer() X = data['data'] y = data['target'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = LogisticRegression(solver='liblinear') model.fit(X_train, y_train) # 得到测试集的预测概率 probs = model.predict_proba(X_test)[:, 1] # 计算ROC曲线的数据点 fpr, tpr, _ = roc_curve(y_test, probs) roc_auc = auc(fpr, tpr) # 绘制ROC曲线 plt.figure(figsize=(8, 6)) 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('Receiver Operating Characteristic Curve') plt.legend(loc='lower right') plt.grid() plt.show() 3、显示结果 |
CopyRight 2018-2019 实验室设备网 版权所有 |