【问题标题】:Targeting a specific metric to optimize in tensorflow针对特定指标在 tensorflow 中进行优化
【发布时间】:2019-02-21 14:42:29
【问题描述】:

我们有什么方法可以使用内置的tensorflow 优化器来针对特定指标进行优化?如果没有,如何实现?例如。如果我只想专注于最大化我的分类器的 F 分数,是否可以在 tensorflow 中这样做?

estimator = tf.estimator.LinearClassifier(
  feature_columns=feature_cols,
  config=my_checkpointing_config,
  model_dir=output_dir,
  optimizer=lambda: tf.train.FtrlOptimizer(
      learning_rate=tf.train.exponential_decay(
          learning_rate=0.1,
          global_step=tf.train.get_or_create_global_step(),
          decay_steps=1000,
          decay_rate=0.96)))

我正在尝试在获得更好的 F 分数的基础上专门优化我的分类器。尽管使用了衰减的learning_rate 和 300 个训练步骤,但我得到的结果不一致。在检查日志中的指标时,我发现precisionrecallaccuracy 的行为非常不稳定。尽管增加了训练步骤的数量,但没有显着改善。所以我想如果我能让优化器更专注于提高整体的 F 分数,我可能会得到更好的结果。因此问题。有什么我遗漏的吗?

【问题讨论】:

    标签: python tensorflow machine-learning


    【解决方案1】:

    可以从技术上调整区分 1 类和 0 类的阈值参数。例如,在逻辑回归中,如果阈值从 0.5 降低到 0.3,则召回率会降低,而准确率会提高,反之亦然。但正如其他人所提到的,这与优化(“最小化”)损失函数不同。

    【讨论】:

    • 我们如何在 tensorflow 中做到这一点?我的意思是提到一个自定义阈值。
    • @ptntialunrlsd tensorflow 只输出概率;您可以随后按您认为合适的方式处理它们
    【解决方案2】:

    在分类设置中,优化器最小化损失,例如交叉熵;准确度、F-score、精度、召回等数量本质上是业务指标,在优化过程中它们不会(也不能)直接最小化。

    这是一个在 SO 中经常以各种形式出现的问题;以下是一些希望能帮助您理清概念的线索(尽管它们指的是准确度、精确度和召回率,但对于 F 分数的论点完全相同):

    Loss & accuracy - Are these reasonable learning curves?

    Cost function training target versus accuracy desired goal

    Is there an optimizer in keras based on precision or recall instead of loss?

    底线,改编我自己的(链接的)答案之一:

    损失和准确度或 F 分数等指标是不同的;粗略地说,准确度和 F 分数等指标是我们从业务 角度真正感兴趣的指标,而损失是学习算法(优化器)试图从 em>数学的视角。更粗略地说,您可以将损失视为业务目标(准确性、F 分数等)到数学领域的“转换”,这是分类问题中所必需的转换(在回归问题中,通常是损失和业务目标相同,或者至少原则上可以相同,例如 RMSE)...

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2013-06-25
      • 2014-09-08
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多