正则化——模型复杂度调整
2021/9/21 23:42:52
本文主要是介绍正则化——模型复杂度调整,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、前言
在线性回归中,我们提过,线性回归模型在多项式特征和交互特征的加持下会变得十分灵活且复杂,几乎可以拟合任意函数曲线,但所谓过刚易则,过于复杂的模型会将数据中的一些噪声也学习进去,导致过拟合问题,所以我们常常更希望模型能稍微简单一些,增加其鲁棒性和泛化能力。
二、正则化
2.1 概念阐述
为了降低模型的复杂度,我们可以对模型的复杂程度施加以一个惩罚项,强制让模型的参数值尽可能的小从而使得模型更简单。以线性回归为例,传统的线性回归模型的损失函数为:,由于是平方项,我们给其乘以一个,方便之后的求导(不影响最终结果)。现我们给以施加一个惩罚项,也被称为正则化项,其中是模型的参数,是惩罚力度,其越大会使得模型最终拟合的参数越小(模型更简单),加入正则化项后损失函数便可以写为:
其中正则化项可以使用L1范数也可以使用L2范数,L1范数即为模型参数的绝对值之和,L2范数即为模型参数的平方和,与L1和L2正则化相对应的线性回归模型分别为Lasso回归和岭回归。
2.2 公式推导
L2正则化在模型求解时由于惩罚项是平方形式,计算相对简单一些,所以本文以岭回归为例说明正则化技术的使用。岭回归的损失函数为:
同样,我们对其求梯度,得:
我们的目的是最小化损失函数,是个求极值问题,所以梯度应为0,化简,得:
进而我们可以得到,
2.3 模型特点
回顾多元线性回归的参数估计值(),考虑到数据的量纲问题,假设X已经经过标准化处理,岭回归就是在散布矩阵的基础上加了一个。之前提过,当变量之间存在多重共线性时,使用传统的最小二乘法可能难以拟合,甚至得到一些错误的结论,根本原因就是在多重共线性下,散布矩阵接近于奇异矩阵,导致最终拟合的参数的分布精度(方差)过大,可能会得到一些完全相反的结论。更有甚者,当模型的样本数比变量数还大时,便是一个奇异矩阵,没法求逆。而岭回归正好解决了这一个问题,从直观层面上来看,岭回归就是在散布矩阵的各对角线上加上一个岭参数,我们知道,当一个矩阵严格对角占优,即每一行主对角线元素的绝对值大于该行其他元素的绝对值之和,则矩阵一定可逆。
实际上,岭回归拟合的参数是无偏估计,我们有:
从式(3)可以看出,当岭参数时,便是的有偏估计,实际上,岭回归是以有偏来换取精度的提升。和传统的回归模型不同,岭回归可看成由进行某种向原点的压缩,由于它对模型的复杂度施加了一定的惩罚(取决于的选择),会使得参数尽可能地接近于0。在对岭参数进行选择时,可以通过岭迹分析来选择,对于岭迹分析这一板块,感兴趣的可以去查相关资料。而在实际使用时,为了方便,一般会根据需要将岭参数设为0.001,0.1,1,10,100,1000等。
需要说明的是,如果想要使用一个可解释性更强的模型,使用L1正则化更好,它具有截断性,约束模型只使用少数几个特征,常常用来进行特征选择。
三、算法实现
我们使用波士顿房价数据集来说明算法,首先利用交互项来构造一个复杂的数据集,并将其标准化处理,得到一个有506个样本,105个特征的数据集:
使用普通最小二乘法来拟合直线:
普通最小二乘法拟合出来的直线过于复杂,模型极有可能将噪声点也学习了进去,泛化能力较差,下面考虑岭回归模型:
与普通最小二乘法相比,岭回归就是在散布矩阵的主对角线上各加一个岭参数alpha,可以发现,最终拟合结果中,多数参数都变为了0,这是因为岭回归对模型的复杂度进行了惩罚,使得模型在拟合时会尽可能地让参数趋近于0。
也可以直接使用sklearn中封装好的库,结果是一致的。
这篇关于正则化——模型复杂度调整的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-11正则表达式学习:入门指南与实践技巧
- 2024-08-15正则表达式入门:基础教程与实践指南
- 2024-01-0939. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
- 2024-01-08如何编写高效的正则表达式?
- 2023-12-29"Matlab中的正则表达式:强大而灵活的工具"
- 2023-09-30这个正则 为啥同样的单号第二个就提取不出来?
- 2023-06-086.2 re 正则表达式
- 2023-06-06将字符串里的\x01,\x02这些替换掉用正则表达式无效?
- 2023-05-24正则表达式详解
- 2023-05-17我让gpt写了一段正则表达式代码,可是运行报错,可以帮忙看看哪里出了问题?