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'])
____