返回

手把手教你用Python中的numpy包实现PR曲线和ROC曲线的计算

人工智能

PR曲线和ROC曲线是评估机器学习模型性能的两个常用指标。PR曲线显示了模型在不同召回率下的准确率,而ROC曲线则显示了模型在不同阈值下的真正例率和假正例率。这两种曲线都可以帮助我们了解模型的性能,并确定模型在实际应用中的适用性。

PR曲线

PR曲线是衡量二分类模型性能的常用指标之一。PR曲线显示了模型在不同召回率下的准确率。召回率是指模型正确识别正例的比例,而准确率是指模型正确识别所有样本的比例。

PR曲线的计算方法如下:

  1. 计算模型在不同阈值下的真正例率和假正例率。
  2. 将真正例率和假正例率绘制在坐标系中,横坐标为假正例率,纵坐标为真正例率。
  3. 连接各个点,即得到PR曲线。

ROC曲线

ROC曲线是衡量二分类模型性能的另一个常用指标。ROC曲线显示了模型在不同阈值下的真正例率和假正例率。真正例率是指模型正确识别正例的比例,而假正例率是指模型错误识别负例为正例的比例。

ROC曲线的计算方法如下:

  1. 计算模型在不同阈值下的真正例率和假正例率。
  2. 将真正例率和假正例率绘制在坐标系中,横坐标为假正例率,纵坐标为真正例率。
  3. 连接各个点,即得到ROC曲线。

使用numpy包计算PR曲线和ROC曲线

我们可以使用numpy包来计算PR曲线和ROC曲线。下面是具体的代码示例:

import numpy as np

def calculate_pr_curve(y_true, y_score):
  """计算PR曲线。

  参数:
    y_true: 真实标签。
    y_score: 模型预测得分。

  返回:
    召回率, 准确率
  """

  # 计算不同阈值下的真正例率和假正例率
  thresholds = np.unique(y_score)
  tprs = []
  fprs = []
  for threshold in thresholds:
    y_pred = np.where(y_score >= threshold, 1, 0)
    tp = np.sum(y_pred * y_true)
    fp = np.sum(y_pred * (1 - y_true))
    fn = np.sum((1 - y_pred) * y_true)
    tn = np.sum((1 - y_pred) * (1 - y_true))
    tpr = tp / (tp + fn)
    fpr = fp / (fp + tn)
    tprs.append(tpr)
    fprs.append(fpr)

  # 返回PR曲线坐标点
  return tprs, fprs


def calculate_roc_curve(y_true, y_score):
  """计算ROC曲线。

  参数:
    y_true: 真实标签。
    y_score: 模型预测得分。

  返回:
    真正例率, 假正例率
  """

  # 计算不同阈值下的真正例率和假正例率
  thresholds = np.unique(y_score)
  tprs = []
  fprs = []
  for threshold in thresholds:
    y_pred = np.where(y_score >= threshold, 1, 0)
    tp = np.sum(y_pred * y_true)
    fp = np.sum(y_pred * (1 - y_true))
    fn = np.sum((1 - y_pred) * y_true)
    tn = np.sum((1 - y_pred) * (1 - y_true))
    tpr = tp / (tp + fn)
    fpr = fp / (fp + tn)
    tprs.append(tpr)
    fprs.append(fpr)

  # 返回ROC曲线坐标点
  return tprs, fprs

结语

PR曲线和ROC曲线都是评估机器学习模型性能的常用指标。PR曲线显示了模型在不同召回率下的准确率,而ROC曲线则显示了模型在不同阈值下的真正例率和假正例率。我们可以使用numpy包来计算PR曲线和ROC曲线。这两种曲线对于评估模型的性能非常有用,可以帮助我们了解模型的优缺点,并确定模型在实际应用中的适用性。