geekdoc-python-zh/docs/askpython/roc-curves-machine-learning.md

4.4 KiB
Raw Permalink Blame History

机器学习中的 ROC 曲线

原文:https://www.askpython.com/python/examples/roc-curves-machine-learning

ROC 曲线代表接收机工作特性曲线。ROC 曲线显示了分类模型的性能。

ROC 告诉我们,根据预测的概率,该模型在区分给定类别方面有多好。

在本文中,我们将了解 ROC 曲线,什么是 AUC并实现一个二元分类问题以了解如何绘制模型的 ROC 曲线。

ROC 曲线介绍

假设我们有一个逻辑回归模型,它将一个事件分类为真或假。我们知道,在逻辑回归中,将一个点分类为真或假的默认阈值是 0.5,但是我们可以根据需要改变该阈值来匹配。

因此ROC 曲线是对于 0.0 和 1.0 之间的多个不同候选阈值,假阳性率(FPR) (x 轴)对真阳性率(TPR) (y 轴)的图。

了解 TPR 和 FPR

如前所述ROC 曲线取决于真阳性率和假阳性率,让我们看看它们是什么。

**真阳性率:**真阳性率的计算方法为真阳性数除以真阳性数和假阴性数之和。

True Positive Rate = True Positives / (True Positives + False Negatives)

**假阳性率:**假阳性率的计算方法是假阳性数除以假阳性数和真阴性数之和。

False Positive Rate = False Positives / (False Positives + True Negatives)

对于不同的阈值,我们将得到不同的 TPR 和 FPR。

ROC Curve

ROC Curve

我们为什么要用 ROC 曲线?

ROC 曲线因以下原因而有用:

  • 曲线下的***【AUC】***面积可以作为模型性能的指标。
  • 不同的模型可以根据它们的 ROC 曲线相互比较。

为了获得最佳模型,我们希望提高我们的真阳性率,降低我们的假阳性率(TPR = 1FPR = 0)。

这意味着我们的模型将能够正确地分离这些类。这样的模型被称为熟练模型。在现实生活中,这是永远达不到的。

在每个阈值没有技能的模型由从图的左下角到右上角的对角线(上图中的蓝线)表示。此类模型的 AUC 为 0.5。这种模型对于每个阈值都具有相等的 TPR 和 FPR。

用 Python 绘制 ROC 曲线

现在让我们构建一个二元分类器,并绘制它的 ROC 曲线,以便更好地理解这个过程。

对于这个例子,我们将使用逻辑回归模型。我们在这里与三个重要的库合作——MatplotlibNumpy 和 sklearn。

#Importing Required Modules
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from  sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve

##Creating a Dataset
X, label = make_classification(n_samples=500, n_classes=2, weights=[1,1], random_state=100)

#Splitting the data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, label, test_size=0.3, random_state=1)

#Creating the class object and 
model = LogisticRegression()
model.fit(X_train, y_train)

#predict probabilities
probs = model.predict_proba(testX)

#Keeping only positive class
probs = probs[:, 1]

#Calculating the FPR and TPR
fpr, tpr, thresholds = roc_curve(testy, probs)

#Plotting the figure
plt.figure(figsize = (10,6))
plt.plot(fpr, tpr, color='red', label='ROC')
plt.plot([0, 1], [0, 1], color='darkblue', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic Curve')
plt.legend()
plt.show()

ROC Curve Of Logistic Regression Model

ROC Curve Of Logistic Regression Model

sklearn 模块为我们提供了roc_curve函数,返回误报率和真报率作为输出。

该函数接受两个类的实际概率和使用LogisticRegression类的.predict_proba( )方法计算的预测正概率数组。

好了,现在我们知道如何绘制二元分类模型的 ROC 曲线。

结论

在本文中,我们获得了一些关于 ROC 曲线的信息,以及为什么它很重要。我们还对真阳性率和假阳性率以及 ROC 曲线如何依赖于它们有了一些了解。最后,我们研究了为逻辑回归模型绘制 ROC 曲线的代码。

快乐学习!