如何计算线性回归中的正则化参数

时间:2012-08-29 16:04:04

标签: machine-learning data-mining regression

当我们有一个高度线性多项式用于拟合线性回归设置中的一组点时,为了防止过度拟合,我们使用正则化,并在成本函数中包含一个lambda参数。然后,此lambda用于更新梯度下降算法中的theta参数。

我的问题是我们如何计算这个lambda正则化参数?

3 个答案:

答案 0 :(得分:46)

正则化参数(lambda)是模型的输入,因此您可能想知道的是如何选择 lambda的值。正则化参数可减少过度拟合,从而减少估计回归参数的方差;但是,它是以牺牲增加偏差为代价来实现的。增加λ会导致过度拟合,但偏差也会增大。所以真正的问题是“你估计你愿意容忍多少偏见?”

您可以采取的一种方法是随机对数据进行多次子采样,并查看估算值的变化情况。然后重复该过程以获得略大的lambda值,以查看它如何影响估计值的可变性。请记住,无论您决定哪种lambda值适合您的子采样数据,您都可以使用较小的值来在完整数据集上实现可比较的正则化。

答案 1 :(得分:24)

封闭表格(TIKHONOV)与梯度下降

嗨!对那里直观和顶尖的数学方法的很好的解释。我只想添加一些特性,在没有解决问题的情况下,可以肯定有助于加快并找到一个良好的正则化超参数的过程的一致性。

我假设您正在讨论 L2 (ak"体重衰减")正则化,由 lambda 术语线性加权,并且您正在使用闭合形式Tikhonov等式(强烈推荐用于低维线性回归模型)或使用反向传播的梯度下降的某些变体来优化模型的权重即可。在这种情况下,您希望选择 lambda 的值,以提供最佳的泛化能力。

封闭表格(TIKHONOV)

如果您能够使用Tikhonov方式使用您的模型(Andrew Ng表示在10k维度下,但此建议至少为5年)Wikipedia - determination of the Tikhonov factor提供了一个有趣的封闭形式解决方案,已被证明提供最佳值。但是这个解决方案可能会引发某种实现问题(时间复杂度/数值稳定性),我不知道,因为没有主流算法来执行它。这个2016 paper看起来非常有希望,如果你真的需要优化你的线性模型,可能值得一试。

  • 为了更快的原型实现,这个2015 Python包似乎迭代地处理它,你可以让它优化然后提取lambda的最终值:
  

在这种新的创新方法中,我们已经推导出一种迭代方法来解决一般的Tikhonov正则化问题,该问题收敛于无噪声解决方案,并不强烈依赖于λ的选择,但仍然避免了反演问题。

来自项目的GitHub READMEInverseProblem.invert(A, be, k, l) #this will invert your A matrix, where be is noisy be, k is the no. of iterations, and lambda is your dampening effect (best set to 1)

GRADIENT DESCENT

本部分的所有链接均来自Michael Nielsen的神奇网络书#34;神经网络和深度学习",推荐讲座!

对于这种方法,似乎更不用说:成本函数通常是非凸的,优化是以数字方式执行的,模型的性能是通过某种形式的交叉验证来衡量的(参见Overfitting and Regularization }和why does regularization help reduce overfitting如果你没有足够的那个)。但即使在交叉验证时,尼尔森也提出了一些建议:你可能想看看this detailed explanation关于L2正则化如何提供权重衰减效应,但总结是它与样本数n ,因此在计算具有L2项的梯度下降方程时,

  

像往常一样使用反向传播,然后将(λ/n)*w添加到所有权重项的偏导数中。

他的结论是,当想要使用不同数量的样本进行类似的正则化效应时,必须按比例更改lambda:

  

我们需要修改正则化参数。原因是因为训练集的大小n已从n=1000更改为n=50000,这会改变权重衰减因子1−learning_rate*(λ/n)。如果我们继续使用λ=0.1意味着减少重量会减少,因此正规化效果会更少。我们通过更改为λ=5.0进行补偿。

这仅在将相同模型应用于不同数量的相同数据时才有用,但我认为它打开了关于它应该如何工作的一些直觉的大门,更重要的是,通过允许你来加速超参数化过程在较小的子集中微调lambda然后按比例放大。

为了选择准确的值,他在how to choose a neural network's hyperparameters的结论中建议纯粹的经验方法:从1开始,然后逐步乘以&除以10,直到找到正确的数量级,然后做一个局部的在该地区内搜索。在this SE related question的评论中,用户Brian Borchers也提出了一种非常有名的方法,可能对本地搜索有用:

  1. 获取培训和验证集的小子集(以便能够在合理的时间内完成许多)
  2. λ=0开始,并在某个地区内少量增加,对模型进行快速培训和验证并绘制两种损失函数
  3. 你会发现三件事:
    1. CV损失功能将始终高于训练值,因为您的模型仅针对训练数据进行了优化(编辑:过了一段时间我已经看到了MNIST的情况,其中添加L2帮助了CV损失比训练减少得快,直到收敛。可能是由于数据的荒谬一致性和次优的超参数化,但)。
    2. 训练损失函数的最小值为λ=0,然后随着正则化而增加,因为防止模型最佳拟合训练数据正是正则化所做的。
    3. CV损失函数将从λ=0开始,然后减小,然后在某个时刻再次开始增加(编辑:这假设设置能够过度拟合λ=0,即该模型具有足够的功率,并且没有其他正规化手段被大量应用)。
  4. λ的最佳值可能大约在CV损失函数的最小值附近,它也可能稍微取决于训练损失函数的外观。查看图片中可能的(但不是唯一的)表示:而不是"模型复杂性"你应该将x轴解释为λ在右边为零并向左增加
  5. L2 diagnostics: instead of "model complexity" one should interpret the x axis **as <code>λ</code> being zero at the right and increasing towards the left

    希望这有帮助!干杯,
    安德烈

答案 2 :(得分:7)

上述交叉验证是机器学习中经常使用的方法。然而,选择可靠和安全的正则化参数仍然是数学研究的热门话题。 如果您需要一些想法(并且可以访问体面的大学图书馆),您可以查看本文: http://www.sciencedirect.com/science/article/pii/S0378475411000607