版本信息:
TensorFlow: 1.6.0
TensorBoard: 1.6.0
我正在做的事情和熟悉的内容:
- 使用预制的
Estimator
tf.estimator.DNNClassifier 来训练一个二分类模型,该模型使用一个严重倾斜的数据集
(即不平衡数据集)。 - 因此,我必须使用
Precision-Recall
曲线来选择最优模型,而不是AUC
曲线。 - 我对
tf.estimator.DNNClassifier
没有做任何修改(当然,我确实更改了这三个参数:hidden_units
、feature_columns
、model_dir
)。 - 当模型的准确率达到某个阈值并停止优化后,我需要继续进行训练:从所有特征中逐个选择一个特征进行训练,以便尽可能去除一些噪声特征。
- 我按照
步骤4
进行操作,每次选择一个特征后,我会得到一个新的训练结果和TensorBoard中关于auc_precision_recall
曲线的新图表。即,当我选择FEATURE_A
时,我得到了图A
;选择FEATURE_B
时,我得到了图B
;选择FEATURE_C
时,我得到了图C
。
图表如下:
图A, 图B, 图C - 关于上述
auc_precision_recall
曲线图的描述:x
轴:表示训练步骤。y
轴:范围从0到1(我想知道的是:y
轴代表什么?)。
- 以下是来自该网站的标准
Precision-Recall
曲线。(我在这里贴出来是为了方便我们讨论我的问题)。
标准Precision-Recall曲线 - 关于上述标准
Precision-Recall
曲线的描述:x
轴:召回率,范围从0到1。y
轴:精确率,范围从0到1。
我的问题:
- 在TensorBoard的
auc_precision_recall
曲线中,y
轴上的值代表什么意思? - TensorBoard的
auc_precision_recall
曲线与标准的Precision-Recall
曲线之间有什么关系? - 为什么TensorBoard的
auc_precision_recall
曲线中y
轴上的值如此奇怪?- 在
图A
中,第一个点是(x, y) = (1, 0.5009)
,为什么在第一步
时y
值是0.5009
?而且为什么大多数其他值也保持在0.5左右(从图A
中我们可以很容易地看出这一点)? - 同样在
图B
中,第一个点是(x, y) = (7, 0.4625)
,为什么这个y
值(0.4625)在前几个训练步骤中不是接近0的值,就像图C
显示的那样?
- 在
回答:
我已经得到了答案:这是TensorFlow 1.6.0版本中的一个错误,原因是计算AUC_PR
值的方法(梯形法)错误,这个错误已在最新版本1.8.0中通过这个提交修复。因此,如果您在训练一个严重倾斜的数据集,请记得将TensorFlow更新到最新版本1.8.0。