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

Lon*_*guy 40 regression machine-learning data-mining

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

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

bog*_*ron 47

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

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

  • 是的,它减少了参数的方差.假设您的线性模型中有_K_参数(a_1,a_2,...,a_K),样本大小为_N_.给定大小为_N_的特定样本,您将计算值a_1到a_k.如果你要采用另一个大小为_N_的随机样本,它将导致一组不同的系数(a).如果您的样本量很小,那么特定系数(例如,a_1)可能在样本之间变化很大(高方差).正则化减少了这种差异.这并不意味着所有系数(a_1 ... a_k)几乎相等. (5认同)

fr_*_*lio 26

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

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

我假设您正在谈论L2(ak"权重衰减")正则化,由lambda项线性加权,并且您使用闭合形式Tikhonov方程优化模型的权重(强烈建议用于低维线性回归模型),或具有反向传播梯度下降的一些变体.在这种情况下,您希望为lambda选择提供最佳泛化能力的值.


封闭表格(TIKHONOV)

如果你能够用你的模型去Tikhonov方式(Andrew Ng说10k维度,但这个建议至少5年)维基百科 - Tikhonov因子的确定提供了一个有趣的封闭形式解决方案,已经证明提供最佳价值.但是这个解决方案可能会引发某些实现问题(时间复杂度/数值稳定性),我不知道,因为没有主流算法来执行它.这篇2016年的论文看起来很有希望,如果你真的需要优化你的线性模型,可能值得一试.

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

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

从项目的GitHub自述文件: InverseProblem.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)


梯度下降

这部分的所有链接都来自Michael Nielsen的精彩在线书籍"神经网络和深度学习",推荐讲座!

对于这种方法,似乎更不用说:成本函数通常是非凸的,优化是以数字方式执行的,模型的性能是通过某种形式的交叉验证来测量的(参见过度拟合和正则化以及为什么正则化如果你没有足够的那么,帮助减少过度拟合).但即使在交叉验证时,尼尔森也提出了一些建议:你可能想看看这个关于 L2正则化如何提供权重衰减效应的详细解释,但总结是它与样本数成反比n,所以当用L2项计算梯度下降方程时,

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

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

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

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

为了选择确切的值,他在他的结论中建议如何选择神经网络的超参数纯粹的经验方法:从1开始然后逐步乘以并除以10,直到找到正确的数量级,然后在其中进行局部搜索.区域.在这个SE相关问题的评论中,用户Brian Borchers也提出了一个非常着名的方法,可能对本地搜索有用:

  1. 获取培训和验证集的小子集(以便能够在合理的时间内完成许多)
  2. ?=0在某些区域内开始并增加少量,对模型进行快速培训和验证,并绘制两种损失函数
  3. 你会发现三件事:
    1. CV损失函数将始终高于训练值,因为您的模型专门针对训练数据进行了优化(编辑:经过一段时间我见过MNIST案例,其中添加L2有助于CV损失比训练减少更快,直到收敛.可能是由于数据的荒谬一致性和次优的超参数化.
    2. 训练损失函数将具有最小值?=0,然后随着正则化而增加,因为防止模型最佳地拟合训练数据正是正则化所做的.
    3. CV损失函数将从高点开始?=0,然后减小,然后在某一点再次开始增加(编辑:这假设设置能够过度拟合?=0,即模型具有足够的功率并且没有大量应用其他正则化方法).
  4. 最佳值?可能大约在CV损失函数的最小值附近,它也可能稍微取决于训练损失函数的外观.查看图片中可能的(但不是唯一的)表示:您应该将x轴解释?右侧为零并向左侧增加,而不是"模型复杂性" .

L2诊断:代替λ在右边为零并向左增加">

希望这可以帮助!干杯,
安德烈斯


小智 7

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

  • 如果你无法访问一个体面的大学图书馆,它似乎可以[这里](http://researchrepository.murdoch.edu.au/4407/1/parameter_choice_methods.pdf). (6认同)
  • @Gschneider感谢您解放知识和教育.哈,帖子的网站网址......应该叫做ScienceIndirect. (2认同)