开始使用免费开始使用

Precision-Recall 权衡

在分类任务中,您经常会看到"Precision-Recall 权衡"这个术语。它从何而来?

通常,我们会选择概率最高的类别来给文档分类。但如果最大概率只有 0.1 呢?仅有 10% 的概率,您是否还应将该文档归入这个类别?

答案取决于具体问题。我们可以设置一个最小阈值来接受分类。随着阈值的变化,precision 和 recall 的取值会朝相反方向变化。

变量 y_true 和模型 model 已加载。此外,如果某个概率低于阈值,则将文档归入 DEFAULT_CLASS(这里选择为类别 2)。

本练习是课程的一部分

使用 Keras 构建语言建模的循环神经网络(RNN)

查看课程

练习说明

  • 使用 .predict() 方法获取每个类别的概率,并将结果保存到变量 pred_probabilities 中。
  • 仅当最大概率大于或等于 0.5 时才接受该预测,并将结果保存到变量 y_pred_50 中。
  • 使用 np.argmax()np.max() 函数,对阈值为 0.8 的情形执行相同的操作。
  • 打印包含所有度量的变量 trade_off

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Get probabilities for each class
pred_probabilities = model.____(X_test)

# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]

trade_off = pd.DataFrame({
    'Precision_50': precision_score(y_true, y_pred_50, average=None), 
    'Precision_80': precision_score(y_true, y_pred_80, average=None), 
    'Recall_50': recall_score(y_true, y_pred_50, average=None), 
    'Recall_80': recall_score(y_true, y_pred_80, average=None)}, 
  index=['Class 1', 'Class 2', 'Class 3'])

____
编辑并运行代码