Numpy二分类ROC曲线Python实现

Numpy二分类ROC曲线Python实现

在本文中,我们将介绍如何在Python中使用NumPy库来生成二分类的ROC曲线。ROC曲线是评价二分类模型性能的一种常见方法,通过绘制分类器的TPR(真阳性率)和FPR(假阳性率)之间的关系曲线来展示模型性能。

阅读更多:Numpy 教程

ROC曲线简介

ROC曲线是一条二维坐标图线,其中的x轴为伪阳性率(FPR),y轴为真阳性率(TPR),FPR是指实际是负样本但被错误预测为正样本的概率,TPR是指实际是正样本,而被正确分类为正样本的概率。在二分类模型中,决策阈值是可以调整的,所以可以得到不同的TPR和FPR值。ROC曲线描述了不同决策阈值下的TPR和FPR的关系,可以帮助我们选择最优的决策阈值来达到最好的分类效果。

代码实现

以下是使用Python和NumPy库生成二分类ROC曲线的步骤:

  1. 导入需要的库
import numpy as np
import matplotlib.pyplot as plt
  1. 准备分类器的真实标签和预测概率

假设我们拥有一个二分类模型,现在需要计算它的ROC曲线。我们可以先准备好分类器的真实标签和预测概率:

# 随机生成100个样本,2个特征
X = np.random.rand(100, 2)

# 定义2个分类器
def classifier1(x):
    w = [-1, 1]
    b = -0.3
    return 1 if np.dot(w, x) + b > 0 else 0

def classifier2(x):
    w = [1, -1]
    b = -0.4
    return 1 if np.dot(w, x) + b > 0 else 0

# 分别计算2个分类器的预测结果
y_true = np.random.randint(0, 2, size=100)
y_pred1 = np.array([classifier1(x) for x in X])
y_pred2 = np.array([classifier2(x) for x in X])

我们用随机生成的100个样本模拟一个二分类模型,其中包含两个特征,定义了两个分类器:classifier1和classifier2。我们分别计算这两个分类器预测的结果,同时也准备好标签值y_true。

  1. 计算TPR和FPR

现在我们已经准备好了分类器的真实标签和预测概率,可以用它们来计算TPR和FPR:

# 计算分类器1的TPR和FPR
TP1 = ((y_pred1 == 1) & (y_true == 1)).sum()
FP1 = ((y_pred1 == 1) & (y_true == 0)).sum()
TN1 = ((y_pred1 == 0) & (y_true == 0)).sum()
FN1 = ((y_pred1 == 0) & (y_true == 1)).sum()
TPR1 = TP1 / (TP1 + FN1)
FPR1 = FP1 / (FP1 + TN1)

# 计算分类器2的TPR和FPR
TP2 = ((y_pred2 == 1) & (y_true == 1)).sum()
FP2 = ((y_pred2 == 1) & (y_true == 0)).sum()
TN2 = ((y_pred2 == 0) & (y_true == 0)).sum()
FN2 = ((y_pred2 == 0) & (y_true == 1)).sum()
TPR2 = TP2 / (TP2 + FN2)
FPR2 = FP2 / (FP2 + TN2)

我们使用y_true和y_pred计算分类器1和分类器2的TPR和FPR。计算方法如下:

  • TP(True Positive)表示真阳性,即实际为正样本,被正确分类为正样本的数量;
  • FP(False Positive)表示假阳性,即实际为负样本,但被错误分类为正样本的数量;
  • TN(True Negative)表示真阴性,即实际为负样本,被正确分类为负样本的数量;
  • FN(False Negative)表示假阴性,即实际为正样本,但被错误分类为负样本的数量;
  • TPR(True Positive Rate)表示真阳性率,即TP / (TP + FN);
  • FPR(False Positive Rate)表示假阳性率,即FP / (FP + TN)。
  1. 绘制ROC曲线

现在我们已经计算出了分类器1和分类器2在不同决策阈值下的TPR和FPR,可以使用matplotlib库来绘制ROC曲线:

# 绘制ROC曲线
plt.figure()
lw = 2
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.plot(FPR1, TPR1, color='darkorange', lw=lw, marker='o', label='Classifier 1')
plt.plot(FPR2, TPR2, color='green', lw=lw, marker='o', label='Classifier 2')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

我们使用matplotlib.pyplot库绘制ROC曲线,第一条曲线是默认分隔线,第二和第三条曲线分别是分类器1和分类器2在不同阈值下的ROC曲线。

其中legend()函数用于指定每条曲线对应的标签,可以使用loc参数指定标签放置位置。

总结

本文介绍了如何使用NumPy和matplotlib库在Python中绘制二分类ROC曲线。ROC曲线是评价二分类模型性能的一种常见方法,通过绘制分类器的TPR和FPR之间的关系曲线来展示模型性能。在实际应用中,可以通过调整决策阈值来选择最优的分类效果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程