c语言编程笔录

首页 >   > 笔记大全

笔记大全

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曲线进行比较和分析,选取最优的算法或调整模型参数,以提高模型的分类性能。