tensorflow - 如何理解张量板中的 auc_precision_recall 曲线?
问题描述
版本:
TensorFlow: 1.6.0
TensorBoard: 1.6.0
我在做什么和熟悉:
- 使用 Pre-made
Estimator
tf.estimator.DNNClassifier训练具有largely skewed dataset
(即不平衡数据集)的二元分类模型。 - 所以,我必须使用
Precision-Recall
曲线来选择最佳模型而不是AUC
曲线。 - 我什么都没改变
tf.estimator.DNNClassifier
(当然,我确实改变了这三个参数:hidden_units
,feature_columns
,model_dir
)。 - 在模型的准确率达到阈值并停止优化后,我必须像这样继续训练:从所有特征中迭代地挑选一个特征并进行训练,这样我就可以尽可能地去除一些噪声特征。
- 我这样做了
Step 4
,每次我选择一个特征时,我都会得到一个新的训练结果和一张auc_precision_recall
来自 TensorBoard 的关于曲线的新图片。即,当我挑选出FEATURE_A
我得到figure A
时,挑选出FEATURE_B
我得到了figure B
,然后挑选出FEATURE_C
我得到了figure C
。
图片如下:
图A、 图B、 图C - 上述
auc_precision_recall
曲线图说明:x
轴:表示训练步骤。y
轴:范围从 0 到 1(这是我想知道的:是什么y
意思?)。
- 以下是该站点的标准
Precision-Recall
曲线。(我将其粘贴在这里只是为了方便我们讨论我的问题)。标准 Precision-Recall 曲线
- 上述标准
Precision-Recall
曲线说明:x
轴:召回,范围从 0 到 1。y
轴:精度,范围从 0 到 1。
我的问题:
y
TensorBoardauc_precision_recall
曲线中轴中的值是什么意思?auc_precision_recall
TensorBoard曲线和标准曲线之间有什么关系Precision-Recall
?- 为什么
y
TensorBoardauc_precision_recall
曲线中轴的值如此奇怪?- 中
figure A
,第一点是(x, y) = (1, 0.5009)
,为什么y
是0.5009
连中1st Step
?还有为什么大多数其他值也保持在 0.5(figure A
我们可以很容易地读到这个)? - 同样在 中
figure B
,第一点是(x, y) = (7, 0.4625)
,为什么y
即使在前几个训练步骤中,这个 (0.4625) 值也不等于接近 0 的值,如图figure C
所示?
- 中
解决方案
我得到了答案:这是 tensorflow 版本 1.6.0 中的一个错误,由计算 的值的错误方式(梯形AUC_PR
)引起,并且此错误已在最新版本 1.8.0 中通过此提交修复。因此,如果您正在训练一个严重倾斜的数据集,请记住将 tensorflow 更新到最新版本 1.8.0。
推荐阅读
- github - Github 操作上的工作流之间的依赖关系
- c# - .NET Core 3.0 IHostedService access web server URL - scheme, host, port etc
- python - 怎么修?除了 SendRequest(等待 60 秒并重新发送)- Python InstagramAPI
- python - 在 64 位 Python 进程中加载 32 位和 64 位 dll
- r - 来自 rsamples 的nested_cv - 不确定超过 2 个组的结果
- java - NMT 类已提交与 Jstat 压缩类空间
- node.js - 如何使用 Nginx 在 MEAN 堆栈应用程序上正确设置 HTTPS/SSL
- jenkins-pipeline - BuildInfo 中未显示的依赖项数量(使用 uploadSpec)
- ios - UIPrintInteractionController 不显示多个页面
- flutter - Flutter 的高级 SDK 更新?