【问题标题】:Understanding Precision Recall Curve and Precision/Recall metrics了解精确召回曲线和精确/召回指标
【发布时间】:2021-09-13 13:42:08
【问题描述】:

我想了解为什么少数类 ("1") 的精确召回曲线如此出色,而同一类的精确率 (0,2) 和召回率 (0,4) 指标如此之好坏的。 我将 sklearn.metrics.plot_precision_recall_curve 与 pos_label=0(多数类)和 pos_label=1(少数类)一起使用。 下面你可以看到使用的代码。

def plotagem_curvas (nome_modelo, modelo, X_test, y_test, folds, pos_label):
  roc_auc = 0
  ap=0
  if (pos_label == 0):
     classe='Not Stroke'
  else:
     classe='Stroke'
  fig, axs = plt.subplots(1, 2, figsize=(12,4))
  axs[0].set_title("Curva ROC - " + nome_modelo + " \"" + classe + "\"" , fontsize=10)
  disp = metrics.plot_roc_curve(modelo, X_test, y_test, ax=axs[0], pos_label=pos_label)
  roc_auc = disp.roc_auc
  axs[1].set_title("Curva Precision Recall - " + nome_modelo + " \"" + classe + "\"", fontsize=10)
  disp = metrics.plot_precision_recall_curve(modelo, X_test, y_test, ax=axs[1], pos_label=pos_label)
  ap = disp.average_precision
  return (roc_auc, ap)

# Random Forest - Precision_recall curve for both classes (0, 1)
roc_auc, ap = plotagem_curvas ("Random Forest", modelo, X_test, y_test, folds, 0)
roc_auc2, ap2 = plotagem_curvas ("Random Forest", modelo, X_test, y_test, folds, 1)

这是混淆矩阵: Matrix

还有曲线...: Curves

不知道是不是调用函数“plot_precision_recall_curve”的时候出错了。

【问题讨论】:

    标签: python metrics precision-recall


    【解决方案1】:

    请记住,您的准确率/召回率曲线是针对分类器的不同阈值绘制的(我假设您使用的是随机森林)。

    精度/召回曲线

    曲线是通过说来计算的; “如果我将模型输出为 0.1(或更大)的输入分类为‘中风’,我的精度/召回率是多少?如果我将模型输出为 0.2(或更大)的输入归类为‘中风’,而不是0.1,那么精度/召回率是多少?如果我将分数更改为 0.3、0.4 ...,1" 会怎样,这就是你得到的曲线图。

    混淆矩阵

    您的混淆矩阵基于单个阈值,即,您可能会说“如果我的模型的分数/输出为 0.5 或更高,我将所有对象归类为‘中风’”(这通常是二进制的标准阈值如果你不改变它)。然后你根据那个单个阈值对你的测试集进行分类,并创建你的混淆矩阵。

    因此,您的 precision = 0.2recall=0.4(我猜)基于阈值 0.5,您的曲线基于 不同 阈值告诉您“是否存在创建阈值准确率和召回率之间的良好权衡?”。

    获取最佳阈值

    您可以使用 scikit-learns precision_recall_curve 获取每个阈值的精度/召回值,选择您的阈值以获得最佳精度/召回值,然后然后创建您的混淆矩阵。

    我假设如果你用它来检查你的模型,当阈值在 0.5 左右时,你会发现那些 0.4 和 0.2 值

    【讨论】:

    • 谢谢。我还有一个疑问。将逻辑回归与随机森林进行比较,随机森林的精确召回曲线要好得多。但是阈值为 0.5(如您所说),我有这些指标:随机森林(精度 = 0,2,召回 = 0,4)和逻辑回归(精度 = 0,16,召回 = 0,75)。问题是“更好的精度召回曲线表明随机森林算法在这种情况下更好,因为我可能会找到一个很好的阈值来平衡精度/召回”? ——
    • 谢谢。很有帮助。
    • 不客气 - 随时接受答案
    猜你喜欢
    • 2017-09-21
    • 2020-04-18
    • 2018-03-20
    • 2017-04-13
    • 2018-09-17
    • 2021-10-23
    • 2016-11-07
    • 2018-02-23
    • 2014-02-20
    相关资源
    最近更新 更多