【机器学习】一文读懂正则化与LASSO回归,Ridge回归

article/2025/9/16 23:21:59

该文已经收录到专题机器学习进阶之路当中,欢迎大家关注。

1.过拟合

当样本特征很多,样本数相对较少时,模型容易陷入过拟合。为了缓解过拟合问题,有两种方法:

       方法一:减少特征数量(人工选择重要特征来保留,会丢弃部分信息)。

       方法二:正则化(减少特征参数w ^的数量级)。

2.正则化(Regularization)

正则化是结构风险(损失函数+正则化项)最小化策略的体现,是在经验风险(平均损失函数)上加一个正则化项。正则化的作用就是选择经验风险和模型复杂度同时较小的模型。

防止过拟合的原理:正则化项一般是模型复杂度的单调递增函数,而经验风险负责最小化误差,使模型偏差尽可能小经验风险越小,模型越复杂,正则化项的值越大。要使正则化项也很小,那么模型复杂程度受到限制,因此就能有效地防止过拟合。

3.线性回归正则化

正则化一般具有如下形式的优化目标:

                                             \ mathop {\ min} \ limits_ {f \ in F} \ left [{\ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {L \ left({​{y_i},f \ left ({​{x_i}} \ right)} \ right)} + \ lambda J \ left(f \ right)} \ right]                      (1)

其中,\ lambda \ geq 0是用来平衡正则化项和经验风险的系数。

正则化项可以是模型参数向量的范数,经常用的有L_1范数,L_2范数(L_1范数:{\左\ |  x \ right \ |  _1} = \ sum \ limits_ {i = 1} ^ m {\ left |  {​{x_i}} \ right |}L_2范数:{\左\ |  x \ right \ |  _2} = \ sqrt {\ sum \ limits_ {i = 1} ^ m {x_i ^ 2}}) 。

我们考虑最简单的线性回归模型。

给定数据集D = \left\{ \left( x _ { i } , y _ { i } \right) \right\} _ { i = 1 } ^ { m },其中,x _ { i } = \left( x _ { i 1 } , x _ { i 2 } , \dots , x _ { i d } \right)y _ { i } \in R

代价函数为:J \ left(w \ right)= \ frac {1} {m} {\ left \ |  {y  -  {w ^ T} X} \ right \ |  ^ 2} = \ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {​{​{left({​{y_i}  -  {w ^ T} {x_i}} \ right)} ^ 2}}                      (2)

(1)L_2范数正则化(Ridge Regression,岭回归)

代价函数为:

                                    J \ left(w \ right)= \ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {​{​{\ left({​{y_i}  -  {w ^ T} {x_i}} \ right )} ^ 2}} + \ lambda \ left \ |  w \ right \ |  _2 ^ 2 \ left({\ lambda> 0} \ right)                      (3)

(2)L_1范数正则化(LASSO,Least Absoulute Shrinkage and Selection Operator,最小绝对收缩选择算子)

代价函数为:

                                    J \ left(w \ right)= \ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {​{​{\ left({​{y_i}  -  {w ^ T} {x_i}} \ right )} ^ 2}} + \ lambda {\ left \ |  w \ right \ |  _1} \ left({\ lambda> 0} \ right)                      (4)

(3)L_1正则项L_2正则项结合(Elastic Net)

代价函数为:

                                    J \ left(w \ right)= \ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {​{​{\ left({​{y_i}  -  {w ^ T} {x_i}} \ right }} ^ 2}} + \ lambda \ left({\ rho {​{\ left \ |  w \ right \ |} _1} + \ left({1  -  \ rho} \ right)\ left \ |  w \ right \ |  _2 ^ 2} \ right)                      (5)

其中,L_1范数正则化、L_2范数正则化都有助于降低过拟合风险,L_2范数通过对参数向量各元素平方和求平方根,使得L_2范数最小,从而使得参数w ^的各个元素接近0 ,但不等于0。 L_1范数正则化比L_2范数更易获得“稀疏”解,即L_1范数正则化求得的w ^会有更少的非零分量,所以L_1范数可用于特征选择,而L_2范数在参数规则化时经常用到(事实上,L_0范数得到的“稀疏”解最多,但L_0范数\左\ |  x \ right \ |  = \#\ left({i \ left |  {​{x_i} \ ne 0} \ right。} \ right)x中非零元素的个数,不连续,难以优化求解。因此常用L_1范数来近似代替)。

为什么L_1正则化更易获得“稀疏”解呢?

假设X仅有两个属性,w ^只有两个参数{W_1},{W_2},绘制不带正则项的目标函数-平方误差项等值线,再绘制L_1L_2范数等值线,如图1正则化后优化目标的解要在平方误差项和正则化项之间折中,即出现在图中等值线相交处采用。L_1范数时,交点常出现在坐标轴上,即{}的例句{}的例句为0;而采用L_2范数时,交点常出现在某个象限中,即{}的例句{}的例句均非0。也就是说,L_1范数比L_2范数更易获得“稀疏”解。

4.岭回归求解

岭回归不抛弃任何一个特征,缩小了回归系数。

岭回归求解与一般线性回归一致。

(1)如果采用梯度下降法:

                                             \ frac {​{\ partial J \ left(w \ right)}} {​{\ partial {w_j}}} = \ frac {1} {m} \ sum \ limits_ {i = 1} ^ m {\ left({ {w ^ T} {x_i}  -  {y_i}} \ right){x_ {ij}} + 2 \ lambda {w_j}}                      (6)

迭代公式如下:

                                             \ begin {array} {l} {w_ {j + 1}} = {w_j}  -  \ frac {\ alpha} {m} \ sum \ limits_ {i = 1} ^ m {\ left({​{w ^ T } {x_i}  -  {y_i}} \ right){x_ {ij}}  -  2 \ lambda {w_j}} \\ = \ left({1  -  2 \ lambda} \ right){w_j}  -  \ frac {\ alpha} {m} \ sum \ limits_ {i = 1} ^ m {\ left({​{w ^ T} {x_i}  -  {y_i}} \ right){x_ {ij}}} \ end {array}                      (7)

(2)如果采用正规方程:

最优解为:

                                    {w ^ *} = {\ left({​{X ^ T} X + \ lambda I} \ right)^ { -  1}} {X ^ T} y                      (8)

最后,将学得的线性回归模型为:

                                                      \ widehat y = {w ^ T} X = {X ^ T} w = {\ left({​{X ^ T} X + \ lambda I} \ right)^ { -  1}} {X ^ T} y                      (9)

5. LASSO回归求解

由于L_1范数用的是绝对值,导致LASSO的优化目标不是连续可导的,也就是说,最小二乘法,梯度下降法,牛顿法,拟牛顿法都不能用。

L_1正则化问题求解可采用近端梯度下降法(Proximal Gradient Descent,PGD)。

(1)优化目标

优化目标为:\ mathop {\ min} \ limits_x \ left [{f \ left(x \ right)+ \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right                      (10)

{f \ left(x \ right)}可导,梯度\ nabla f \ left(x \ right)满足L-Lipschitz条件(利普希茨连续条件),即存在常数L> 0,使得:

                                             \压裂{​{\左\ |  {\ nabla f \ left({x'} \ right) -  \ nabla f \ left(x \ right)} \ right \ | _2 ^ 2}} {​{\ left \ |  {x' -  x} \ right \ | _2 ^ 2}} \ le L,\ forall \ left({x,x'} \ right)                      (11)

L-Lipschitz(利普希茨连续条件)定义:

对于函数f \ left(x \ right),若其任意定义域中的X_1X_2都存在L> 0,使得\左|  {f \ left({​{x_1}} \ right) -  f \ left({​{x_2}} \ right)} \ right |  \ le L \ left |  {​{x_1}  -  {x_2}} \ right |,即对于f \ left(x \ right)上每对点,连接它们的线的斜率的绝对值总是不大于这个实数大号

(2)泰勒展开

X_K处将f \ left(x \ right)进行二阶泰勒展开:

                             f \ left(x \ right)= f \ left({​{x_k}} \ right)+ \ nabla f \ left({​{x_k}} \ right)\ left({x  -  {x_k}} \ right)+ \ frac {​{f''\ left({​{x_k} + \ xi} \ right)}} {2} {\ left({x  -  {x_k}} \ right)^ 2}                      (12)

由(11)式,泰勒将展开式的二阶导用大号代替,得到:

                           f \ left(x \ right)\ approx f \ left({​{x_k}} \ right)+ \ nabla f \ left({​{x_k}} \ right)\ left({x  -  {x_k}} \ right) + \ frac {L} {2} {\ left({x  -  {x_k}} \ right)^ 2}                      (13)

(3)简化泰勒展开式

将(13)式化简:

         \ begin {array} {l} f \ left({​{x_k}} \ right)+ \ nabla f \ left({​{x_k}} \ right)\ left({x  -  {x_k}} \ right)+ \ frac {L} {2} {\ left({x  -  {x_k}} \ right)^ 2} \\ = \ frac {L} {2} \ left [{​{​{​{left({x  -  {x_k} } \ right)} ^ 2} + \ frac {2} {L} \ nabla f \ left({​{x_k}} \ right)\ left({x  -  {x_k}} \ right)+ \ frac {1} {​{​{L ^ 2}}} {​{\ left({\ nabla f \ left({​{x_k}} \ right)} \ right)} ^ 2}} \ right]  -  \ frac {L} {2} \ frac {1} {​{​{L ^ 2}}} {\ left({\ nabla f \ left({​{x_k}} \ right)} \ right)^ 2} + f \ left({​{x_k}} \ right)\\ = \ frac {L} {2} {\ left [{x  -  \ left({​{x_k}  -  \ frac {1} {L} \ nabla f \ left({​{x_k}} \ right }} \ right)} \ right] ^ 2} + \ varphi \ left({​{x_k}} \ right)\\ = \ frac {L} {2} \ left \ |  {x  -  \ left({​{x_k}  -  \ frac {1} {L} \ nabla f \ left({​{x_k}} \ right)} \ right)} \ right \ | _2 ^ 2 + \ varphi \ left ({​{x_k}} \ right)\ end {array}                      (14)

其中,\ varphi \ left({​{x_k}} \ right){\ rm {=}} f \ left({​{x_k}} \ right) -  \ frac {1} {​{2L}} {\ left({\ nabla f \ left({​{x_k}} \ right)} \ right)^ 2}X无关的常数。

(4)简化优化问题

这里若通过梯度下降法对f \ left(x \ right)f \ left(x \ right)连续可导)进行最小化,则每一步下降迭代实际上等价于最小化二次函数\ widehat f \ left(x \ right),推广到优化目标(10),可得到每一步迭代公式:

                           {x_ {k + 1}} = \ mathop {\ arg \ min} \ limits_x \ left [{\ frac {L} {2} \ left \ |  {x  -  \ left({​{x_k}  -  \ frac {1} {L} \ nabla f \ left({​{x_k}} \ right)} \ right)} \ right \ | _2 ^ 2 + \ lambda {​{ \左\ |  x \ right \ |} _1}} \ right]                      (15)

z = {x_k}  -  \ frac {1} {L} \ nabla f \ left({​{x_k}} \ right)

则可以先求ž,再求解优化问题:

                                    {x_ {k + 1}} = \ mathop {\ arg \ min} \ limits_x \ left [{\ frac {L} {2} \ left \ |  {x  -  z} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right]                      (16)

(5)求解

X ^ IX的第一世个分量,将(16)式按分量展开,其中不存在x ^ ix ^ j(i \ neq j)这样的项,即X的各分量之间互不影响,所以(12)式有闭式解。

为什么(16)式不存在x ^ ix ^ j(i \ neq j)这样的项?

因为展开(16)式得到,\ begin {array} {l} \ mathop {\ arg \ min} \ limits_x \ left [{\ frac {L} {2} \ left \ |  {x  -  z} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right] \\ = \ mathop {\ arg \ min} \ limits_x \ left({\ frac {L} {2} \ left \ | {​{x ^ 1}  -  {z ^ 1}} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ | {​{x ^ 1}} \ right \ |} _1}} \ right)+ \ mathop {\ arg \ min} \ limits_x \ left({\ frac {L} {2} \ left \ | {​{x ^ 2}  -  {z ^ 2}} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ | {​{x ^ 2} } \ right \ |} _1}} \ right)+ \ cdots \\ + \ mathop {\ arg \ min} \ limits_x \ left({\ frac {L} {2} \ left \ | {​{x ^ d} -  {z ^ d}} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ | {​{x ^ d}} \ right \ |} _1}} \ right)\ end {array}

从而优化问题变为求解d个独立的函数:f \ left(x \ right)= {\ left({x  -  z} \ right)^ 2} + \ lambda {\ left \ |  x \ right \ | _1}

对于上述优化问题需要用到soft thresholding软阈值函数(证明见参考文献2),即对于优化问题:

                                             \ mathop {\ arg \ min} \ limits_x \ left [{\ left \ |  {x  -  z} \ right \ | _2 ^ 2 + \ lambda {​{\ left \ |  x \ right \ |} _1}} \ right]                      (17)

其解为:pro {x_u} \ left(z \ right)= sign \ left(z \ right)\ max \ left \ {​{\ left |  z \ right |   - 你,0} \ right \}                      (18)

而我们的优化问题为(16)式,则得到闭式解为:

                                             x_ {k + 1} ^ i = \ left \ {​{​{begin {array} {* {20} {c}} {​{z ^ i}  -  \ frac {​{2 \ lambda}} {L}}&, &{​{z ^ i}> \ frac {​{2 \ lambda}} {L}} \\ 0&,&{ -  \ frac {​{2 \ lambda}} {L} <{z ^ i} <\ frac { {2 \ lambda}} {L}} \\ {​{z ^ i} + \ frac {​{2 \ lambda}} {L}}&,&{​{z ^ i} < -  \ frac {​{2 \ lambda }} {L}} \ end {array}} \ right \}                      (19)

其中,x_ {k + 1} ^ iZ 1我分别是x_ {k + 1}ž的第一世个分量。因此,通过PGD能使LASSO和其他基于L_1范数最小化的方法得以快速求解。

参考文献:

1.《机器学习》第十一章嵌入式选择与L1正则化——周志华

2.  LASSO回归与L1正则化西瓜书

3.  机器学习之正则化(正规化)

4.  正则化及正则化项的理解

 


http://chatgpt.dhexx.cn/article/JPeZTisg.shtml

相关文章

地址总线之寻址原理

译码器将地址总线的数据经过译码后锁定相应的位置&#xff0c;译码器有两种方结构&#xff0c;一种是单译码器&#xff0c;另外一种是双译码器。单译码器适用于存储容量小的应用环境中。双译码器结构将译码器分为两部分一部分是行译码器&#xff0c;另一部分是列译码器。行和列…

[组原]初识-地址总线,地址寄存器,存储单元,存储字长

文章目录 知识点机器字长指令寻址方式按字寻址按字节寻址 存储单元存储字存储字长 &#x1f49f;前记&#xff1a;由一道做错的题总结结果 ⏲ 05.09 知识点 机器字长 计算机进行一次整数运算所能处理的二进制数据的位数&#xff1b;通常也是CPU内部数据通路的宽度&#xff1b;…

地址总线/数据总线/控制总线的作用

数据总线 &#xff08;1&#xff09; 是CPU与内存或其他器件之间的数据传送的通道。 &#xff08;2&#xff09;数据总线的宽度决定了CPU和外界的数据传送速度。 &#xff08;3&#xff09;每条传输线一次只能传输1位二进制数据。eg: 8根数据线一次可传送一个8位二进制数据(…

内存结构、地址总线、数据总线详解

下图为内存的结构图 DB为一个bit&#xff0c;一行DB对应着一个存储单元。 数据总线个数对应着存储单元的位数 数据总线个数 存储单元位数 寄存器位数 如上图所示&#xff0c;内存的结构就是从上到下依次给存储单元编号。 按字节编址 就是每8个bit 对应着一个地址。 读取…

1.8地址总线

现在我们知道&#xff0c;CPU是通过地址总线来指定存储器单元的。可见地址总线上能传送多少个不同的信息&#xff0c;CPU就可以对多少个存储单元进行寻址。 现假设&#xff0c;一个CPU有10根地址总线&#xff0c;让我们来看一下它的寻址情况。我们知道&#xff0c;在电子计算机…

ARM数据/地址总线架构简析

ARM架构简析 1&#xff0c;ARM概述 现在大家讲的ARM的概念实际上是很模糊的&#xff0c;他可能指的是一类芯片&#xff0c;或者指的是ARM公司&#xff0c;亦或者是精简指令集&#xff0c;还是千万人手中的饭碗。下面引用一段关于百度百科关于ARM的准确描述 ARM架构&#xff0…

什么是前端总线,后端总线,内部总线、系统总线,外部总线,地址总线,数据总线,控制总线

文章 部分内容来自于 电子发烧友 内部总线、系统总线和外部总线汇总 部分内容来自于 知乎 前端总线&#xff0c;系统总线&#xff0c;内部总线&#xff0c;外部总线 本文是在两篇文章的基础上进行了二次加工&#xff0c;对两篇文章的精华内容进行了提炼&#xff0c;删掉了对理解…

地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...

总线(Bus):是计算机各种功能部件之间传送信息的公共通信干线. 总线(Bus):是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制…

计算机控制总线传输的是,总线,地址总线,数据总线和控制总线

总线(Bus): 这是一条通用的通信干线&#xff0c;可以在计算机的各种功能组件之间传输信息. 它是由电线组成的变速箱线束. 根据计算机传输的信息类型&#xff0c;计算机的总线可以分为数据总线和地址. 总线和控制总线分别用于传输数据&#xff0c;数据地址和控制信号. 总线是一种…

计算机64位地址总线,地址总线与数据总线的关系,功能和宽度

1. 地址总线与数据总线之间的关系 数据总线用于传输数据. 每条数据线传输一个二进制位64位处理器 数据总线,而8条线恰好传输一个字节. 但是,地址总线传输地址,每个地址也传输一个二进制位,而8条地址线传输8个二进制位. 这8个二进制位具有2 ^ 8个不同的变化,因此它们可用于…

地址总线

现在我们知道&#xff0c;CPU是通过地址总线来指定存储器单元的。可见地址总线上能传送多少个不同的信息&#xff0c;CPU就可以对多少个存储单元进行寻址。 现假设&#xff0c;一个CPU有10根地址总线&#xff0c;让我们来看一下它的寻址情况。我们知道&#xff0c;在电子计算机…

地址总线、物理地址、虚拟地址讲解

什么是地址总线&#xff1f; 地址总线(Address Bus &#xff1b;又称位址总线&#xff09;属于一种电脑总线&#xff08;一部份)&#xff0c;是由CPU或有DMA能力的单元&#xff0c;用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。 换而言之&#xff0c;就…

计算机总线详解(数据总线、地址总线、控制总线)

文章目录 1 概述2 总线分类2.1 数据总线 Data Bus2.2 地址总线 Address Bus2.3 控制总线 Control Bus 3 扩展3.1 常考题3.2 百度百科 - 总线 Bus 1 概述 总线&#xff08;Bus&#xff09; 是计算机各种功能部件之间传送信息的 公共通信干线如果说 主板&#xff08;Mother Boar…

总线之地址总线、数据总线、控制总线

https://www.cnblogs.com/codexlx/p/13252705.html 1.地址总线&#xff1a; CPU是通过地址总线来指定存储单元的&#xff0c;因此总线地址上能传送多少个不同的信息&#xff0c;CPU就可以对多少个存储单元进行寻址 一个CPU有N根地址线&#xff0c;那么可以说这个CPU的地址总线…

CentOS8 arm64架构 鲲鹏服务器上安装zabbix-agent

1、使用系统yum源中自带的资源安装 查看yum中自带的zabbix资源包 sudo yum list |grep zabbix安装 sudo install zabbix40-agent.aarch64 # 填写自己服务器上的资源2、下载资源包安装 获取官网下载地址 zabbix官网下载.aarch64.rpm的资源包&#xff0c;地址 搜索需要的包 …

ARM64(aarch64)下安装tensorflow

首先从Github下载安装包&#xff1a; tensorflow-on-arm 选择合适的版本&#xff0c;例如tensorflow-1.14.0-cp35-none-linux_aarch64.whl 命名规则&#xff1a;cp35代表python3.5&#xff0c;aarch64表示架构信息 wget https://github.com/lhelontra/tensorflow-on-arm/rele…

QEMU启动ARM64 Linux内核

目录 前言前置知识virt开发板ARM处理器家族简介 安装qemu-system-aarch64安装交叉编译工具交叉编译ARM64 Linux内核交叉编译ARM64 Busybox使用busybox制作initramfs使用QEMU启动ARM64 Linux内核 前言 本文介绍采用 qemu 模拟ARM-64bit开发板&#xff08;针对ARM-32bit的有另一…

centos for arm64

Arm64的centos版本自7.5.1804以后不再和7.4、7.3、7.2等之前的一样直接提供一个rootfs.tar.xz的压缩包&#xff0c;全部变成了ISO的安装文件&#xff0c;因此需要EFI来引导安装&#xff0c;如果Aarch64的cpu用的是uboot就只有干瞪眼了&#xff0c;笔者花了一翻功夫&#xff0c;…

ARM64逆向基础

为什么要学ARM64&#xff1f; android 5.0系统就开始引入Arm64-v8a&#xff0c;它用于支持全新的AArch64架构&#xff0c;这个架构也就是我们要学习的arm64汇编。目前android系统已经发展到anroid 11版本。因此现在主流的apk都是支持AArch64架构。那么我们利用IDA&#xff08;…

第一章 QEMU虚拟机与ARM64平台搭建

系列文件目录 《ARM64体系结构结构编程与实践》学习与应用记录 第一章 QEMU虚拟机与ARM64平台搭建 文章目录 系列文件目录本章前言一、ubuntu虚拟机安装1.ubuntu20.04镜像下载2.镜像安装3.工具安装 二、代码下载1.git配置2.runninglinuxkernel代码下载3.代码编译 总结 本章前言…