Python如何用鸢尾花数据绘制ROC和AUC曲线
更新时间:2023-10-02背景
ROC曲线是评价二元分类算法优劣的一种重要指标,其横轴是假正率(FPR),纵轴是真正率(TPR),AUC(Area Under Curve)表示ROC曲线下的面积。在数据挖掘和机器学习领域中,ROC和AUC广泛应用于模型评估、特征选择等方面。Python是一种高效而易读的语言,适合处理和分析数据,本文着重介绍如何使用Python实现ROC和AUC曲线及其评价。
数据集
鸢尾花数据集是模式识别研究领域中常用的数据集之一,它由3种不同类型的鸢尾花的50个样本组成,每个样本由4个属性组成:萼片长度(sepal length)、萼片宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)。我们通过对鸢尾花数据集进行二分类,即将setosa类作为正例,非setosa类作为负例,来演示如何绘制ROC和AUC曲线。
实现过程
首先我们需要导入必要的库:
import numpy as np import pandas as pd from sklearn.datasets import load_iris 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
然后我们加载鸢尾花数据集,并将setosa类标记为正例(1),其他类标记为负例(0):
iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['target'] = iris.target df['target'] = np.where(df['target']==0, 1, 0) # setosa 作为正例 X = df.iloc[:, :-1].values y = df.iloc[:, -1].values X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=0)
我们使用逻辑回归模型训练并预测:
model = LogisticRegression(random_state=0) model.fit(X_train, y_train) probas_ = model.predict_proba(X_test) fpr, tpr, thresholds = roc_curve(y_test, probas_[:, 1]) roc_auc = auc(fpr, tpr)
最后,我们绘制ROC和AUC曲线:
plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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 example') plt.legend(loc="lower right") plt.show()
总结
本文介绍了如何使用Python实现鸢尾花数据集的ROC和AUC曲线以及评价。在实现过程中,我们使用了逻辑回归模型进行训练和预测,使用sklearn.metrics中的roc_curve和auc函数计算ROC和AUC指标,使用matplotlib绘图库绘制ROC和AUC曲线。ROC和AUC曲线是评价二元分类算法性能的重要指标,能够帮助我们评估模型的准确性和稳定性。在实际应用中,我们可以结合实际业务场景,对不同分类算法的ROC和AUC曲线进行比较和分析,选取最优的算法或调整模型参数,以提高模型的分类性能。