【发布时间】:2019-02-28 04:05:04
【问题描述】:
我已经训练了一个模型,该模型尝试在图像中分割感兴趣的对象。我想通过确定网络输出的精度、召回率和 f 度量来评估我的模型的性能。
我知道precision=tp/(tp+fp) 和recall=tp/(tp+fn)。我发现sklearn.metrics 有多个函数来确定这些值,但我似乎无法有效地使用这些函数。
起初,我编写了一个脚本,找到了 tp、fp 和 fn 值并返回了实际的 int 数字,因此例如在一个示例中,我有 2 个对基本事实感兴趣的对象,但是网络检测到 4 个感兴趣的对象,因此这些将我的值置于:
tp = 2, fp = 2 and fn = 0
现在我不能使用这些,因为 sklearn.metrics 期望数组作为输入,所以我重写了我的脚本以提供以下数组:
gt_array = [1, 1]
pred_array = [1, 0, 1, 0]
因为其中两个预测是正确的,而另外两个是错误分类的对象。
如果我把这个交给函数:
metrics.classification_report(gt_array, pred_array)
和
metrics.precision_recall_fscore_support(gt_array, pred_array,average='binary')
我得到错误:
{ValueError}Multi-label binary indicator input with different numbers of labels
我可以看到,但我假设该函数会根据大小差异自动确定 fn 和 fp 值。
那么当我有不同大小的数组时,如何确定这些指标。在某些示例中,ground_truth 有 10 次检测,但网络输出仅显示 5,那么在这种情况下,如何将 fn 值合并到上述函数中?
谢谢
【问题讨论】:
-
那么,您如何将
1分配给您的池中每个有趣的对象,否则分配0。比你拥有相同长度的y_true和y_pred并且你可以继续使用 sklearn 函数 -
由于误报和误报,它们的长度不同。如果基本事实表明该样本中重新发送了两个对象,并且网络检测到 4 个,那么其中 2 个是误报。这会导致不同长度的数组
标签: python classification