对不同学习率决定的日志损耗与准确性?

数据挖掘 交叉验证 准确性 表现 公制 网格搜索
2021-10-09 15:30:18

在使用交叉验证和网格搜索的模型调整时,我正在绘制不同的学习率的图表,以分别对日志损耗和准确度进行策划。

日志丢失

当我使用Log Lock作为网格搜索中的得分时,以识别给定范围的最佳学习率,我得到了如下所示:

最佳:-0.474619使用学习率:0.01

  • -0.674328(0.000482):学习率:0.0001
  • -0.583335(0.003236):学习率:0.001
  • -0.474619(0.004336):学习率:0.01
  • -0.494540(0.008705):学习率:0.1

准确性

当我在网格搜索中使用准确性,以识别给定范围的最佳学习速率,我得到了如下结果:

最佳:0.781958使用学习率:0.1

  • 0.656220(0.085705):学习率:0.0001
  • 0.715279(0.010021):学习率:0.001
  • 0.740141(0.007927):学习率:0.01
  • 0.781958(0.003770):学习率:0.1

在这两种情况下,我得到了不同的学习率,即我应该用来调整我的模型。当分数为日志损耗时,我的学习率为0.01的最佳设置。当得分为准确性时,我的学习率为0.1的最佳设置。

在这种情况下,我应该为我的模型使用什么分数?

4个回答

在我看来,将损失与准确性相关联是不正确的。

损失用于优化假设,以便我们可以获得最佳权重,而准确度用于确定模型在正确预测值方面的表现。

如果概率 > .5,则模型内部引用predict_proba()并返回 1,否则返回 0。例如,如果返回的 predict_proba() 为 (.49, .51),模型将返回 1 作为分类输出。

现在考虑一个用例,其中一些经过训练的模型用于测试数据预测。假设这样的模型具有 100% 的准确度,但 predict_proba() 值接近 (.49,.51) 或 (.51,.49) 即具有非常低的置信水平。

在这种情况下logloss是相当高的,即使它有 100% 的准确率。

如果我们选择模型的标准是“准确度值”,那么我们就是在选择坏模型。

实际上,模型使用损失来决定类别的概率。因此,logloss 仅表明与测试样本中类别的正确标签相比,您的模型确定了多少。

准确度表示测试样本被正确分类的百分比。

看这个:深度学习中准确率和损失之间有什么关系?

由于分类级别的突然差异(以及损失是由平均值给出的事实),损失可能会下降一点,但准确度根本没有提高。

至于评估模型时使用哪个指标,我认为通常你希望它是准确的(用于分类),因为它最终才是最重要的。我们主要使用logloss来检查一切是否正常(即收敛平滑且单调递减)。*

我相信您可能也为不同的学习率使用了相同数量的 epoch,对吧?在这种情况下,较低的学习率会变慢一点是很自然的。除非它找到一个令人讨厌的平台,否则它应该收敛到一个较低的最小值。

无论如何,当涉及到学习率时,最好的做法是在训练过程中让它变得更小,即学习率衰减。许多从业者还使用余弦来减小学习率的值,然后重新设置它,这样我们“永远不会”陷入局部最小值。您可以查看fast.ai课程的第一讲,了解另一种更好的技术。

*编辑

所以……我的推理有点过于简单了——这太可怕了。让我们再更详细一点。你应该在这里分析什么?答案是:这取决于你的问题。准确性是很好的指导,但是,例如,如果您的数据集的 90% 由一个类组成,您的算法可能会“学习”给所有该类的内容并称之为一天,这将为您提供 90% 的准确性,但不会没有任何意义。为了更容易地识别这些不平衡的情况,许多库为您提供了将分类器与所谓的基类零分类器进行比较的方法,这可以作为性能比较的基本标准。

在几乎所有情况下,评估分类器性能的建议是使用混淆矩阵并寻找您最关心的统计数据。例如,如果您正在查看诸如识别某人患有癌症之类的事情,您希望假阳性率 (FPR)尽可能低,因为误诊病人可能是一场灾难,如果某人没有生病,对他或她来说,做更多的测试并确定这一点并不是什么大问题。

另一个在分析分类器性能方面非常标准的工具是ROC-AUC 标准,它创建了一个图表和索引,同时考虑了假阳性率 (FPR)真阳性率 (TPR)

让我重申,这根本不是一个容易的问题,需要仔细分析。使用所有必要和可用的工具。

如果您使用回溯梯度下降,就像我在此链接中的回答一样

梯度下降总是收敛到最优吗?

,您可以自动找到学习率,无需手动微调。