first commit

This commit is contained in:
张乾
2024-10-16 06:37:41 +08:00
parent 633f45ea20
commit 206fad82a2
3590 changed files with 680090 additions and 0 deletions

View File

@ -0,0 +1,127 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
12 正则化处理:收缩方法与边际化
今天的内容是线性回归的正则化扩展。正则化称得上是机器学习里的刮骨疗毒刮的是过拟合overfitting这个任何机器学习方法都无法摆脱的附骨之疽。
本质上讲,过拟合就是模型过于复杂,复杂到削弱了它的泛化性能。由于训练数据的数目是有限的,因此我们总是可以通过增加参数的数量来提升模型的复杂度,进而降低训练误差。可人尽皆知的是,学习的本领越专精,应用的口径就越狭窄,过于复杂的模型就像那个御膳房里专门切黄瓜丝的御厨,让他改切萝卜就下不去刀了。
正则化regularization是用于抑制过拟合的方法的统称它通过动态调整估计参数的取值来降低模型的复杂度以偏差的增加为代价来换取方差的下降。这是因为当一些参数足够小时它们对应的属性对输出结果的贡献就会微乎其微这在实质上去除了非相关属性的影响。
在线性回归里最常见的正则化方式就是在损失函数loss function中添加正则化项regularizer而添加的正则化项\(R(\\lambda)\)往往是待估计参数的\(p\)-范数。将均方误差和参数的范数之和作为一个整体来进行约束优化相当于额外添加了一重关于参数的限制条件避免大量参数同时出现较大的取值。由于正则化的作用通常是让参数估计值的幅度下降因此在统计学中它也被称为系数收缩方法shrinkage method
将正则化项应用在基于最小二乘法的线性回归中就可以得到线性回归的不同修正penalized linear regression。添加正则化项之后的损失函数可以写成拉格朗日乘子的形式
\[\\tilde E({\\bf w}) = \\dfrac{1}{2} \\sum\\limits_{n = 1}^ N \[f(x_n, {\\bf w}) - y_n\] ^ 2 + \\lambda g( || {\\bf w} ||_p), g( || {\\bf w} ||_p) < t\]其中的\(\\lambda\)是用来平衡均方误差和参数约束的超参数当正则化项为1-范数时修正结果就是LASSO当正则化项为2-范数的平方时修正结果就是岭回归当正则化项是1-范数和2-范数平方的线性组合\(\\alpha || {\\bf w} ||_2^2 + (1 - \\alpha) || {\\bf w} ||_1\)修正结果就是弹性网络elastic net)。
正则化对线性回归的改进图片来自Pattern Recognition and Machine Learning图3.4
岭回归和LASSO具有不同的几何意义上图给出的是岭回归和LASSO的可视化表示图中的蓝色点表示普通最小二乘法计算出的最优参数外面的每个蓝色圆圈都是损失函数的等值线每个圆圈上的误差都是相等的从里到外误差则越来越大
红色边界表示的则是正则化项对参数可能取值的约束这里假定了未知参数的数目是两个岭回归中要求两个参数的平方和小于某个固定的取值\(w_1 ^2 + w_2 ^ 2 < t\)因此解空间就是浅色区域代表的圆形而LASSO要求两个参数的绝对值之和小于某个固定的取值\(|w_1| + |w_2| < t\)因此解空间就是浅色区域代表的方形
不管采用哪种正则化方式最优解都只能出现在浅色区域所代表的约束条件下因而误差等值线和红色边界的第一个交点就是正则化处理后的最优参数交点出现的位置取决于边界的形状圆形的岭回归边界是平滑的曲线误差等值线可能在任何位置和边界相切
相形之下方形的LASSO边界是有棱有角的直线因此切点最可能出现在方形的顶点上这就意味着某个参数的取值被衰减为0
这张图形象地说明了岭回归和LASSO的区别岭回归的作用是衰减不同属性的权重让所有属性一起向圆心收拢LASSO则直接将某些属性的权重降低为0完成的是属性过滤的任务
而弹性网络作为两者的折中结合了不同的优点它不会轻易地将某些属性抛弃从而使全部信息得以保留但对不重要的特征也会毫不手软地大幅削减其权重系数
对正则化以上的认识都来自于频率主义的视角在上一季的专栏中我曾介绍过从概率的角度看岭回归是当参数\(\\bf w\)满足正态分布时用最大后验概率进行估计得到的结果LASSO是当参数\(\\bf w\)满足拉普拉斯分布时用最大后验概率进行估计得到的结果
这样的结论体现出贝叶斯主义对正则化的理解正则化就是引入关于参数的先验信息
但是翻开贝叶斯主义的机器学习词典你不会找到正则化这个词因为这个概念并没有显式地存在而是隐式地融于贝叶斯定理之中贝叶斯方法假设待估计的未知参数满足一定的概率分布因此未知参数对预测结果的影响并不体现为满足某种最优性的估计值”,而是通过积分消除掉未知参数引入的不确定性这个过程在之前探讨贝叶斯视角下的概率时已经通过Alice和Bob投球的例子加以解释你可以回忆一下
在贝叶斯的术语里将未知随机变量按照其概率分布积分成常量的过程叫边际化marginalization)。边际化是贝叶斯估计中非常重要的核心概念它起到的正是正则化的作用
还是以线性回归为例假定每个输出\(y\)都是其属性\(\\bf x\)的线性组合与服从正态分布\(N(0, \\sigma ^ 2)\)的噪声的叠加属性的权重系数\(\\bf w\)则服从\(N(0, \\alpha)\)的先验分布
那么利用训练数据\(\\bf y\)估计测试数据\(y^\*\)输出的预计分布predictive distribution就可以写成以下的条件概率
\[p(y^\* | {\\bf y}, \\alpha, \\sigma ^ 2)\]\[= \\int p(y^\* | {\\bf w}, \\sigma ^ 2) p({\\bf w} | {\\bf y}, \\alpha, \\sigma ^ 2) {\\rm d}{\\bf w}\]在这个式子中\(\\alpha\)\(\\sigma ^ 2\)都是独立于训练数据的超参数在频率主义的最大似然估计中预测结果并不会将参数\(\\bf w\)的估计准确性表示到结果中
而贝叶斯主义则根据\(\\bf w\)每一个可能的取值计算出对应结果\(y^\*\)再对连续分布的\(\\bf w\)取平均
就可以得到\(y^\*\)的概率分布这就是上面这个表达式的含义
对于预测结果\(y^\*\)来说它的不确定性既来自于训练数据\(\\bf y\)也来自于未知的超参数\(\\alpha\)\(\\sigma ^ 2\)
但事实上超参数只是人为设定的数值在真实的估计任务中我们需要得到与任何多余参量都没有关系的\(p(y^\* | {\\bf y})\)
在全贝叶斯的框架下要积分掉超参数的影响就必须一视同仁地对超参数进行概率分布\(p(\\alpha)\)\(p(\\sigma ^ 2)\)的建模这些超参数的先验信息就被叫作超先验hyperprior)。
引入超先验后目标概率就可以写成
\[p(y^\* | {\\bf y}) \]\[= \\int p(y^\* | {\\bf w}, \\sigma ^ 2) p({\\bf w}, \\alpha, \\sigma ^ 2 | {\\bf y}) {\\rm d}{\\bf w} {\\rm d} \\alpha {\\rm d} \\sigma ^ 2 \]看到这里你肯定被这么多乱七八糟的符号搞的晕头转向了因为正常人都会有这种感觉这正是贝叶斯概率为人诟病的一个缺点难以求出解析解
要计算这个复杂的积分必须使用一些近似的技巧首先利用条件概率的性质上式中的第二个积分项也就是已知训练数据时参数和超参数的条件概率可以改写成
\[p({\\bf w}, \\alpha, \\sigma ^ 2 | {\\bf y}) = p({\\bf w} | {\\bf y}, \\alpha, \\sigma ^ 2) p(\\alpha, \\sigma ^ 2 | {\\bf y})\]等式右侧的第一项其实就是岭回归的最优参数可以证明这个概率服从参数已知的正态分布因而可以看成一个确定项可在计算第二项也就是根据训练数据确定超参数时就只能将实数域上的概率密度近似为最可能most probable的取值\(\\alpha_{MP}\)\(\\sigma^2_{MP}\)用点估计结果代替原始的概率分布
利用贝叶斯定理可以得出最可能的超参数取值应该让下面的后验概率最大化
\[p(\\alpha, \\sigma ^ 2 | {\\bf y}) = \\dfrac{p({\\bf y} | \\alpha, \\sigma ^ 2) p(\\alpha) p(\\sigma ^ 2)}{p({\\bf y})}\]在计算中分母上的\(p({\\bf y})\)与超参数无关因此可以忽略不计由于超参数的取值是任意的将它们的超先验分布设定为无信息的先验uninformative prior就是合理的选择\(p(\\alpha)\)\(p(\\sigma ^ 2)\)也就会以常数形式的均匀分布出现
所以寻找最可能的\(\\alpha_{MP}\)\(\\sigma^2_{MP}\)就变成了计算边际似然概率marginal probability\(p({\\bf y} | \\alpha, \\sigma ^ 2)\)的最大值把边际似然概率对待估计的参数进行展开就可以将后验概率最大化等效成似然概率最大化
\[p({\\bf y} | \\alpha, \\sigma ^ 2) = \\int p({\\bf y} | {\\bf w}, \\sigma ^ 2) p({\\bf w} | \\alpha) {\\rm d} {\\bf w}\]积分的第一项是最大似然估计的解第二项则是参数满足的先验分布经过复杂的计算可以得出积分结果仍然具有正态分布的形式下面的任务就是找到使训练数据\(\\bf y\)出现概率最大的一组超参数\(\\alpha\)\(\\sigma ^ 2\)表示噪声的强度的超参数\(\\sigma ^ 2\)其实是个固定的取值通常可以通过多次试验直接测出在确定\(\\sigma ^ 2\)之后就可以用梯度下降法来找到最优的\(\\alpha\)
总结起来利用贝叶斯概率来确定最优参数的步骤可以归纳如下求解的对象是已知训练数据时测试数据的条件概率\(p(y^\* | {\\bf y})\)要计算这个条件概率就要对所有未知的参数和超参数进行积分以消除这些变量
而在已知的数据和未知的超参数之间搭起一座桥梁的正是待估计的参数\(\\bf w\)它将\(p(y^\* | {\\bf y})\)的求解分解成两部分一部分是根据已知数据推断参数另一部分是根据参数推断未知数据
而在根据已知数据推断参数时又要先推断超参数再利用超参数和数据一块儿推断参数对超参数的推断则可以通过边际似然概率简化
贝叶斯推断过程示意图
和具有直观几何意义的岭回归相比贝叶斯边际化处理中一个接一个的条件概率没法不让人头疼这么复杂的方法到底意义何在呢它的价值就在于计算出的结果就是最优的结果
频率主义的正则化只是引入了一个正则化系数\(\\lambda\)\(\\lambda\)的最优值到底是多少呢只能靠重复试验确定这就需要用验证数据集validation set来评估每个备选\(\\lambda\)的最优性
相比之下贝叶斯主义的边际化就简化了最优化的过程让边际似然概率最大的超参数就是最优的超参数
这样做的好处就是所有数据都可以用于训练不需要额外使用验证集这在数据较少时是非常有用的
在编程中很多第三方的Python库都可以直接实现不同的正则化处理在Scikit-learn库中线性模型模块linear_model中的Lasso类和Ridge类就可以实现\(l_1\)正则化和\(l_2\)正则化使用这两个类对上一篇文章中拟合出来的多元线性回归模型进行正则化处理将两种算法中的正则化项参数均设置为\(\\lambda = 0.05\),就可以得到修正后的结果:
不同线性回归方法的结果比较
线性系数的变化直观地体现出两种正则化的不同效果在未经正则化的多元线性回归中用红框圈出来的系数比较反直觉因为它意味着门将的表现对球队积分起到的是负作用这种结论明显不合常理
这个问题在两种正则化操作中都得以解决
LASSO将4个特征中2个的系数缩减为0这意味着一半的特征被淘汰掉了其中就包括倒霉的守门员在LASSO看来对比赛做出贡献的只有中场和前锋球员而中场的作用又远远不及前锋——这样的结果是否是对英超注重进攻的直观印象的佐证呢
和LASSO相比岭回归保留了所有的特征并给门将的表现赋予了接近于0的权重系数以削弱它对结果的影响其它的权重系数也和原始多元回归的结果更加接近但LASSO和岭回归的均方误差都高于普通线性回归的均方误差LASSO的性能还要劣于岭回归的性能这是抑制过拟合和降低误差必然的结果
不同回归算法的拟合结果示意图蓝点为多元线性回归绿点为LASSO红点为岭回归
今天我和你分享了频率观点下的正则化和贝叶斯观点下的边际化以及它们在线性回归中的应用其要点如下
正则化的作用是抑制过拟合通过增加偏差来降低方差提升模型的泛化性能
正则化项的作用是对解空间添加约束在约束范围内寻找产生最小误差的系数
频率视角下的正则化与贝叶斯视角下的边际化作用相同
边际化对未知的参数和超参数进行积分以消除它们的影响天然具有模型选择的功能
最后需要说明的是正则化的最优参数通常会通过交叉验证进行模型选择来产生也就是在从不同数据子集上计算出的不同\(\\lambda\)中择优取之由于英超数据集的样本数目较少所以没有添加交叉验证的过程
岭回归和LASSO虽然都能降低模型的方差但它们处理参数的方式不同得到的结果也不一样那么在你看来这两种正则化手段分别适用于什么样的场景呢
欢迎发表你的观点