首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解精确召回曲线和精确/召回度量

理解精确召回曲线和精确/召回度量
EN

Stack Overflow用户
提问于 2021-07-01 13:21:04
回答 1查看 445关注 0票数 1

我想了解为什么少数类("1")的精确召回曲线如此好,而对于同一个类的精度(0,2)和召回(0,4)的度量却如此糟糕。我将sklearn.metrics.plot_precision_recall_curve与pos_label=0 (多数类)和pos_label=1 (少数类)结合使用。下面您可以看到所使用的代码。

代码语言:javascript
复制
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)

以下是混淆矩阵:矩阵

曲线.:曲线

我不知道在调用函数"plot_precision_recall_curve“时是否犯了错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-01 13:49:34

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

精度/召回曲线

该曲线的计算方法是:“如果我将输入分类为‘笔画’--输出为0.1 (或更大)‘,那么我的精确/回忆是什么?如果我将输入分类为’笔画‘--输出为’笔画‘(或更高),而不是’笔画‘,那么精确/回忆是什么?如果我将分数改为0.3,0.4 ...,1”--这就是你得到的曲线。

混淆矩阵

您的混淆矩阵是基于单个阈值的,也就是说,如果我的模型的分数/输出大于0.5,您可能会说“我将所有对象归类为‘笔画’”(如果不更改,则通常是二进制情况下的标准阈值)。然后,根据单个阈值对测试集进行分类,并创建混淆矩阵。

因此,您的precision = 0.2recall=0.4 (我猜)是基于阈值0.5,其中您的曲线是基于不同的阈值告诉您“是否有一个阈值,创造了一个良好的权衡,您的精确度和回忆?”

得到最优门限

您可以通过使用scikit学习曲线获得每个阈值的精度/召回值,为您的最佳精度/召回值选择阈值,然后创建您的混淆矩阵。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68211004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档