【应用】【正则化】L1、L2正则化

article/2025/9/21 8:09:28

L1正则化的作用:特征选择从可用的特征子集中选择有意义的特征,化简机器学习问题。著名的LASSO(Least Absolute Shrinkage and Selection Operator)模型将L1惩罚项和线性模型结合,使用最小二乘代价函数。L1正则化导致模型参数的稀疏性,被广泛地用于特征选择(feature selection)机制。

L2正则化的作用:PRML书中描述“focus on quadratic both for its practical importance and analytical tractbility”,即L2正则化具有实际应用的重要性和分析的易处理性。

接下来的博文,以L1、L2及Lp范数为开篇,介绍多种范数的数学表达式和几何轮廓。其次,描述线性回归的代价函数中正则化的作用;最后以几何图形的方式,描述L1和L2正则化对模型稀疏性的影响。

目录

一、范数及几何轮廓

二、正则化最小二乘估计

三、L1、L2正则化直观理解


一、范数及几何轮廓

L1正则化和L2正则化(L1,L2 Regularization)使用的正则化项是L1范数和L2范数[3]。换个角度来看,L1和L2范数是Lp范数的特殊形式。

Lp范数:

\left \| x \right \|_{n} = \left [\sum_{i=1}^{n}\left | x_{i} \right |^{p} \right ]^{1/p} = \sqrt[p]{\left | x_{1} \right |^{p} + \left | x_{2} \right |^{p} + ... \left | x_{n} \right |^{p}}

L2范数:

\left \| x \right \|_{2} = \left [\sum_{i=1}^{n}\left | x_{i} \right |^{2} \right ]^{1/2} = \sqrt[2]{\left | x_{1} \right |^{2} + \left | x_{2} \right |^{2} + ... \left | x_{n} \right |^{2}}

L1范数:

\left \| x \right \|_{1} = \sum_{i=1}^{n}\left | x_{i} \right | = \left | x_{1} \right |+ \left | x_{2} \right | + ... \left | x_{n} \right |

当我们的目标是二维优化时,L0.5、L1、L2、L3、L4的几何轮廓如下图所示。由图可知,p的值越小,几何轮廓越贴近坐标轴;p的值越大,几何轮廓越远离坐标轴。

 绘制上图采用的半径为1,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import mathnorm_list = [0.5, 1, 2, 3, 4]
plt.figure(figsize=(5 * len(norm_list), 4 * 1))for index, value in enumerate(norm_list):y = 1.0w1 = [i for i in np.arange(-1.0, 1.0, 0.0001)]# 当w2 >= 0时:w2_positive = [math.pow(y - abs(j) ** value, 1 / value) for j in w1]# 当w2 < 0时:w2_negative = [-1 * math.pow(y - abs(j) ** value, 1 / value) for j in w1]# 所有点集w1_all = w1 + w1w2_all = w2_positive + w2_negativeplt.subplot(1, len(norm_list), index+1)plt.plot(w1_all, w2_all, '.', alpha=0.5)plt.title(f"L{value}-norm")plt.xlabel("w1")plt.ylabel("w2")plt.subplots_adjust(wspace=0.5, hspace=0)
plt.show()

二、正则化最小二乘估计

为了防止过拟合,我们通常会在目标函数中加上正则化项:

cost function = E_{D}\left ( w \right ) + E_{w}\left ( w \right )

式中:

E_{D}\left ( w \right )是与数据和参数相关的损失函数;

E_{w}\left ( w \right )是与参数相关的正则化项。

如果我们对损失函数添加二范数的正则化项,得到:

cost function = E_{D}\left ( w \right ) + E_{w}\left ( w \right ) = \frac{1}{2}\sum_{i=1}^{N}\left \{ y - W^{T} \Phi \left ( X\right )\right \} ^{2} + \frac{\lambda }{2}\sum_{j=1}^{N}\left | w \right |^{2}

使用最小二乘估计法,让 cost function 对W求偏导,可求得W*:

W^{*}= \left ( \lambda I + \Psi ^{T}\Psi \right )^{-1}\Psi ^{T}Y

上式中每个符号代表的含义请查阅文献[1],这里不作过多的阐述。

三、L1、L2正则化直观理解

L1范数的正则化又称为lasso,它有个特性是:当\lambda足够大时,部分系数w_{j}会趋近于0,从而导致模型出现稀疏性。L2范数的正则化又称为ridge,但稀疏性特点在L2范数下的正则化时会得到改善。

深入的来看,当我们想最小化cost function时,假定E_{W}\left ( W \right )的最大值为\eta,即:

E_{W}\left ( W \right )\leqslant \eta

那么,cost function的最小化问题等价于在约束 E_{W}\left ( W \right )\leqslant \eta 下最小化非正则化项 E_{D}\left ( w \right )

lasso和ridge稀疏性的变化可通过二维平面来直观理解:

 阴影区域是惩罚项L2和L1的参数空间;蓝色线条是E_{D}\left ( w \right )的等值线。当w1和w2在参数空间内寻找最优解时,蓝色区域会不断扩大,当与阴影区域第一次相切时为最优解 W*。但是,不同点在于L2的最优解W*不是在拐点处取得,而L1的最优解会在拐角处(0,w2)取得。那么在高维空间内,除了拐点以外,还有很多边的轮廓取得最优解,这又会产生更多的稀疏性。所以,L1正则化多用于特征选择,L2正则化多用于抑制过拟合。

参考文献:

[1] Christopher M, Bishop F.R.Eng. Pattern Recognition and Machine Learning[M]. Springer, 2006.

[2] Ian Godfellow, Yosua Bengio, Aaron Courville. Deep Learning[M]. MIT Press, 2017.

[3] 天池平台. 阿里云天池大赛赛题解析[M]. 电子工业出版社, 2020.


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

相关文章

机器学习中正则化项L1和L2的直观理解

文章目录 正则化&#xff08;Regularization&#xff09;稀疏模型与特征选择的关系 L1和L2正则化的直观理解正则化和特征选择的关系为什么梯度下降的等值线与正则化函数第一次交点是最优解&#xff1f; L2正则化和过拟合的关系 正则化参数的选择L1正则化参数L2正则化参数 Refer…

微信小程序自定义授权弹框

前言 最近微信获取用户信息的接口有调整&#xff0c;就是这货&#xff1a;wx.getUserInfo(OBJECT)&#xff0c;文档描述如下&#xff1a; 此接口有调整&#xff0c;使用该接口将不再出现授权弹窗&#xff0c;请使用 <button open-type"getUserInfo"></but…

微信小程序组件 - 中间底部弹出输入弹框

GitHub Demo 地址: jh-weapp-demo 实现一些常用效果、封装通用组件和工具类 小程序码 一、 jh-input-alert 中间输入弹框&#xff0c;可设置最大输入长度&#xff0c;单行多行显示 单行 <jh-input-alert title输入框标题 placeholder请输入 maxlength10 bind:cancelcancel …

微信小程序展示弹窗的几种方式

小程序中展示弹窗有四种方式&#xff1a;showToast、showModal、showLoading、showActionSheet 官方文档链接 效果图 wxml <!-- 1.消息提示框 --> <button size"mini" bindtap"handleShowToast">ShowToast</button><!-- 2.模态对话…

微信小程序——小程序自己的页面弹框

微信小程序——小程序自己的页面弹框 1. 页面样式: 2.代码块 在这里插入代码片 &#xff08;一&#xff09;.wxml文件中给一个触发事件 <image src"../../img/icon-delete.png" bindtapdeleteCar data-id{{car.platecard}} class"icon"></imag…

微信小程序底部弹出框

微信小程序的底部弹出框 wxml <!-- 弹出框 start --> <view class"dialog_screen" bindtap"hideModal" wx:if"{{showModalStatus}}"></view> <view animation"{{animationData}}" class"dialog_attr_bo…

【微信小程序】小程序中的各种弹窗API

前言&#xff1a;小程序中提供了很多种快捷方便的弹窗API供开发者使用&#xff0c;例如wx.showToast&#xff0c;wx.showModal&#xff0c;wx.showActionSheet&#xff0c;wx.showLoading还有wxml中的loading标签。 一、直接上代码 <!-- test.wxml --> <view class&q…

小程序带输入框的弹窗

老规矩&#xff0c;直接上代码 <block wx:if"{{isShowConfirm}}"><view classtoast-box><view classtoastbg></view><view classshowToast><view classtoast-title><text>确认支付</text></view><view cla…

微信小程序 自定义弹框组件

话不多说直接上代码 目录 1、wxml 2、js 3、wxss 4、json 5、效果展示&#xff08;具体内容可以自定义&#xff09; 1、wxml <!--pages/components/confirmBox/confirmBox.wxml--> <wxs src"../../../filter/urlFilter.wxs" module"filter"…

微信小程序——点击某个按钮实现下面弹窗的出现

效果图:(真的是图) wxml(代码里面有解释&#xff09; <button type"primary" bindtap"Popup">点我</button> <!--点击后灰色背景的设置--> <view wx:if"{{now_state}}" class"background" bindtap"hideM…

微信小程序实现底部向上弹框

本文转自 作者&#xff1a;smallzip 链接&#xff1a;https://www.jianshu.com/p/bd9a4f4b8e6a 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 效果 小程序自定义底部弹出modal框组件&#xff0c;仿照小程序sheet-action的效果&#xff0…

uniapp微信小程序的各种弹框提示(轻提示)

您直接复制粘贴即可使用不需要做特殊的处理。 如您满意请给莫成尘点个Fabulous 1&#xff1a; 纯文字提示框 uni.showToast({title: 只有文字弹窗,icon: none, //如果要纯文本&#xff0c;不要icon&#xff0c;将值设为noneduration: 2000 //持续时间为 2秒 }) 2&…

小程序实现弹出输入框

1.微信自带组件 样式&#xff1a; wxml <view class"close" bindtap"close">拒绝</view>js Page({//拒绝close(e) {wx.showModal({editable:true,//显示输入框placeholderText:输入拒绝原因,//显示输入框提示信息success: res > {if (re…

微信小程序提示弹窗大全

wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明&#xff1a; 示例代码&#xff1a; ? 1 2 3 4 5 wx.showToast({ title: 成功 , icon: success , duration: 2000 }) wx.hideToast() 隐藏消息提示框 ? 1 2 3 4 5 6 7 8 9 wx.showToast({ title: 加载中 , icon: lo…

微信小程序 四种弹窗方式

微信小程序弹窗 一、wx.showToast(Object object)二 、wx.showModal(Object object)三、wx.showLoading(Object object)四、wx.showActionSheet(Object object)五、官方文档 一、wx.showToast(Object object) 显示消息提示框 wx.showToast({title: 内容, //提示的内容duration…

微信小程序弹出框详解

[html] view plain copy <span style"font-family:Comic Sans MS;font-size:18px;color:#333333;"><view class"container" class"zn-uploadimg"> <button type"primary"bindtap"showok">消息提示…

微信小程序几种常用弹窗提示

第一种&#xff1a;弹出提示框&#xff0c;可以选择确定或者取消。 代码&#xff1a;wx.showModal({title: 提示,content: 这是一个模态弹窗,success: function (res) {if (res.confirm) {//这里是点击了确定以后console.log(用户点击确定)} else {//这里是点击了取消以后conso…

微信小程序几种常用弹窗提示方法

1.提示文字 可以设置显示时间&#xff08;仅提示时使用&#xff09;duration设置时间 不显示icon&#xff0c;此时 title文字最多可显示两行 也可以显示icon&#xff0c;显示icon文字最多显示 7 个汉字长度 icon常用的有&#xff1a;success、error、loading wx.showToast(…

微信小程序展示弹窗的方式

微信小程序中展示弹窗有四种方式&#xff1a;wx.showToast、wx.showModal、wx.showLoading、wx.showActionSheet 具体参数可参照微信开发文档 1. wx.showToast <!-- index.wxml --> <!-- wx.showToast(消息提示框) --> <button bindtap"handleShowToast&…

微信小程序之弹出框

微信小程序中toast消息提示框只有两种显示的效果&#xff0c;就是成功和加载&#xff0c;使用wx.showToast(OBJECT)。 看下有关参数说明&#xff1a; 代码很简单&#xff1a; wx.showToast({title: 成功,icon: succes,duration: 1000,mask:true}) mask属性好像并没有起作用。有…