利用scikitlearn画ROC曲线实例

yizhihongxing

当我们使用机器学习模型时,我们通常需要在模型的性能方面进行评估。评估分类模型性能的一种常用方法是绘制ROC曲线。实现ROC曲线的方法之一是使用Python中的Scikit-Learn库。以下是一个完整的示例,该示例演示了如何使用Scikit-Learn库绘制ROC曲线。

数据集选择和预处理

在开始绘制ROC曲线之前,首先需要准备数据集。以下是一个简单的数据集示例:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=1000, n_classes=2, n_features=10, n_informative=5, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

该数据集由一个包含10个特征的输入向量和与之对应的二进制分类标签组成。在此示例中,我们使用Scikit-Learn库中的make_classification函数来生成一个随机数据集。我们还使用train_test_split函数将数据集划分为训练集和测试集。

训练模型

接下来,我们需要训练一个分类器模型来对数据进行分类。以下是一个简单的示例,该示例使用Scikit-Learn库中的Logistic回归模型:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train, y_train)

我们使用LogisticRegression类初始化模型,并使用训练集对其进行拟合。

绘制ROC曲线

一旦我们拟合了分类器模型,我们就可以使用测试集来预测分类标签,并使用roc_curve函数计算ROC曲线中的真阳性率和假阳性率。以下是一个完整的代码示例,该示例演示了如何使用Scikit-Learn库绘制ROC曲线:

from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt

y_pred_proba = model.predict_proba(X_test)[:,1]
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

plt.plot(fpr, tpr)
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()

首先,我们使用predict_proba函数计算每个测试集样本的预测概率。然后,我们使用roc_curve函数计算真阳性率和假阳性率,并返回一个包含这两个指标及其对应的分类阈值的数组。

最后,我们使用Matplotlib库中的plot函数来绘制ROC曲线。我们在图形上还添加了一条虚线,该虚线是ROC曲线空间中对角线的表示,它表示随机猜测分类器。

示例1

为了更好地说明ROC曲线的绘制和解释,我们可以使用另一个数据集,并使用逻辑回归分类器来预测其中的标签。以下代码演示了如何使用Scikit-Learn库从数据集中读取数据并训练逻辑回归分类器:

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt

breast_cancer_data = load_breast_cancer()
X = breast_cancer_data.data
y = breast_cancer_data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred_proba = model.predict_proba(X_test)[:,1]
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

plt.plot(fpr, tpr)
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()

示例2

ROC曲线还可以用于比较不同模型或分类算法之间的性能。下面是一个演示比较两种不同分类器算法的ROC曲线的代码示例。

from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

X, y = make_classification(n_samples=1000, n_classes=2, n_features=10, n_informative=5, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

model_svc = SVC(probability=True)
model_rf = RandomForestClassifier()

model_svc.fit(X_train, y_train)
model_rf.fit(X_train, y_train)

y_pred_proba_svc = model_svc.predict_proba(X_test)[:,1]
y_pred_proba_rf = model_rf.predict_proba(X_test)[:,1]

fpr_svc, tpr_svc, thresholds_svc = roc_curve(y_test, y_pred_proba_svc)
fpr_rf, tpr_rf, thresholds_rf = roc_curve(y_test, y_pred_proba_rf)

plt.plot(fpr_svc, tpr_svc, label='SVC')
plt.plot(fpr_rf, tpr_rf, label='Random Forest')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()

在此示例中,我们使用Scikit-Learn库中的SVCRandomForestClassifier类训练了两个不同的分类器。同时,我们计算了每个分类器的ROC曲线,并将两个曲线绘制在同一个图形上,以便比较它们的性能。注意,在此示例中,我们还使用Matplotlib库中的legend函数添加了一些文本,以说明每个曲线代表的分类器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用scikitlearn画ROC曲线实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • NumPy-ndarray 的数据类型用法说明

    NumPy-ndarray的数据类型用法说明 NumPy是Python中一个重要的科学计算库,提供了高效的维数组和各种生对象,以及用于计算的各种函数。在NumPy中,ndarray是重要的数据类型,它是一个多维数组对象,可以用于存储同类型的数据。本文将深入讲解NumPy-ndarray的类型用法,包括数据类型的定义、创建、转换和使用等知识。 数据类型的定义 …

    python 2023年5月13日
    00
  • jupyter 使用Pillow包显示图像时inline显示方式

    在Jupyter中,可以使用Pillow包显示图像。默认情况下,图像会在新的窗口中打开,但是可以使用inline显示方式将图像嵌入到Jupyter Notebook中。以下是Jupyter使用Pillow包显示图像时inline显示方式的完整攻略: 安装Pillow包 在使用Pillow包之前,需要先安装它。可以使用pip命令在终端中安装Pillow包。以下…

    python 2023年5月14日
    00
  • 详解NumPy数组的切片和切块

    NumPy是Python中重要的科学计算库,其中的数组可以看作是多维度的容器,可以方便地进行数据处理和计算。 在NumPy中,我们可以使用切片和切块对数组进行索引和取值,以便更加灵活地对数据进行操作。 接下来,我们将详细介绍NumPy数组的切片和切块的操作。 切片操作 在NumPy中,我们可以使用切片操作从数组中提取部分数据。NumPy数组的切片操作类似于P…

    2023年2月28日
    00
  • Pytorch实现LSTM案例总结学习

    Pytorch实现LSTM案例总结学习 前言 作为深度学习领域的重要分支,循环神经网络(RNN)和长短时记忆网络(LSTM)在很多任务中都有着广泛的应用。本文以Pytorch框架为例,介绍了如何使用Python编写LSTM神经网络模型,并将其应用于时间序列预测和自然语言生成等案例中。读者可根据自己的需求和兴趣,针对具体的数据集和任务进行模型的调试和优化。 L…

    python 2023年5月14日
    00
  • numpy 产生随机数的几种方法

    NumPy 产生随机数的几种方法 NumPy是Python中一个非常强大的数学库,它提供了许多高效的数学和工具,特别对于数组矩阵的处理。在NumPy中,我们可以使用种方法来产生随机数。本攻略将介绍NumPy中产生随机数的几种方法,并提供两个示例。 .random.rand()函数 np.random.rand()函数用于指定形状的随机数组,数组中的元素取值范…

    python 2023年5月13日
    00
  • Numpy中stack(),hstack(),vstack()函数用法介绍及实例

    下面是关于“Numpy中stack(),hstack(),vstack()函数用法介绍及实例”的完整攻略,包含了两个示例。 stack()函数 stack()函数是Numpy中用于沿着新轴数组列的函数。下面是一个示例,演示如何使用stack()函数将两个一维数组沿着新轴连接成一个二维数组。 import numpy as np # 创建两个一维数组 a = …

    python 2023年5月14日
    00
  • Numpy中的数组搜索中np.where方法详细介绍

    以下是关于“Numpy中的数组搜索中np.where方法详细介绍”的完整攻略。 np.where方法的概念 在NumPy中,我们可以使用np.where()方法来搜索数组中满足条件的元素,并返回它们的索引。np.where()方法可以帮助我们更方便地处理数组数据。 np.where方法的使用 下面是np.where()的基本语法: np.where(cond…

    python 2023年5月14日
    00
  • 使用python的pyplot绘制函数实例

    使用Python的Pyplot绘制函数实例的完整攻略 Pyplot是Matplotlib的子模块,它提供了一组类似于MATLAB的绘图工具,可以用于绘制各种类型的图表。本文将介绍如何使用Python的Pyplot绘制函数实例,包括基本语法、常用函数和两个示例。 基本语法 使用Pyplot绘制函数的基本语法如下: import matplotlib.pyplo…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部