定位特定指标以优化张量流

时间:2018-09-17 15:59:21

标签: python tensorflow machine-learning

我们是否可以使用内置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分数,那么我可能会获得更好的结果。因此是一个问题。有什么我想念的吗?

2 个答案:

答案 0 :(得分:2)

在分类设置中,优化程序将损失降到最低,例如交叉熵准确性,F得分,准确性,召回率等数量本质上是 business 指标,并且在优化过程中没有(也不能直接)将它们最小化。

在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分数等指标是不同的;粗略地说,从 business 角度来看,准确度和F分数是我们真正感兴趣的指标,而损失是学习算法(优化程序)试图从最小化的目标函数。 em>数学观点。更粗略地说,您可以将损失视为业务目标(准确性,F分数等)对数学域的“转换”,这是分类问题(在回归问题中,通常是损失和业务目标是相同的,或者至少在原理上可以相同,例如RMSE)。

答案 1 :(得分:0)

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