机器学习正则化技术:Ridge、Lasso与ElasticNet全解析
机器学习中的正则化技术
在机器学习中,正则化技术(如 Ridge 和 Lasso)主要用于解决过拟合问题,通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码:
一、正则化解决的问题
- 过拟合:模型在训练集表现过好,但测试集表现差。
- 高维数据:当特征数量多或存在多重共线性时,模型易受噪声影响。
- 特征选择:自动识别重要特征(尤其是 Lasso)。
二、Ridge 回归 (L2 正则化)
原理
损失函数中加入 L2 范数惩罚项(系数平方和),使系数趋向于接近零但不为零。
适用场景
- 特征间高度相关(多重共线性)。
- 需要保留所有特征但限制其影响。
Scikit-learn 实例
from sklearn.linear_model import Ridge
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error# 加载数据并划分训练集和测试集
data = load_diabetes()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化数据
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 训练 Ridge 模型
ridge = Ridge(alpha=1.0) # alpha 控制正则化强度
ridge.fit(X_train_scaled, y_train)# 评估模型
y_pred = ridge.predict(X_test_scaled)
print("Ridge MSE:", mean_squared_error(y_test, y_pred))
print("Ridge 系数:", ridge.coef_)
三、Lasso 回归 (L1 正则化)
原理
损失函数中加入 L1 范数惩罚项(系数绝对值之和),使部分系数归零,实现特征选择。
适用场景
- 高维数据且存在大量不相关特征。
- 需要简化模型(自动特征选择)。
Scikit-learn 实例
from sklearn.linear_model import Lasso# 训练 Lasso 模型
lasso = Lasso(alpha=0.1) # alpha 较大会导致更多系数为零
lasso.fit(X_train_scaled, y_train)# 评估模型
y_pred = lasso.predict(X_test_scaled)
print("\nLasso MSE:", mean_squared_error(y_test, y_pred))
print("Lasso 系数:", lasso.coef_)
print("零系数数量:", sum(lasso.coef_ == 0))
四、关键对比
| 技术 | 正则化类型 | 系数行为 | 适用场景 |
|---|---|---|---|
| Ridge | L2 | 系数接近零但不为零 | 多重共线性,保留所有特征 |
| Lasso | L1 | 部分系数严格为零 | 特征选择,高维稀疏数据 |
五、超参数调优
使用交叉验证选择最佳 alpha:
from sklearn.linear_model import RidgeCV, LassoCV# RidgeCV 调优
ridge_cv = RidgeCV(alphas=[0.1, 1.0, 10.0])
ridge_cv.fit(X_train_scaled, y_train)
print("\n最佳 Ridge alpha:", ridge_cv.alpha_)# LassoCV 调优
lasso_cv = LassoCV(alphas=[0.001, 0.01, 0.1], max_iter=10000)
lasso_cv.fit(X_train_scaled, y_train)
print("最佳 Lasso alpha:", lasso_cv.alpha_)
六、结论
- Ridge:适合保留所有特征但降低过拟合风险。
- Lasso:适合特征选择或处理高维稀疏数据。
- 弹性网络(ElasticNet):结合 L1 和 L2 正则化,适合同时需要特征选择和共线性处理。
通过调整正则化强度(alpha),可以平衡模型复杂度与拟合能力,提升泛化性能。
Ridge 和 Lasso 在防止过拟合上的不同主要体现在以下几个方面:
1. 正则化方式
-
Ridge (L2 正则化):
- 在损失函数中加入系数平方和的惩罚项。
- 使系数趋向于接近零但不为零,从而减小模型的复杂度。
- 适用于特征之间存在多重共线性的情况,能够保留所有特征但降低它们的影响。
-
Lasso (L1 正则化):
- 在损失函数中加入系数绝对值之和的惩罚项。
- 使部分系数严格为零,实现特征选择,简化模型。
- 适用于高维数据且存在大量不相关特征的情况,能够自动筛选出重要的特征。
2. 系数行为
-
Ridge:
- 系数会被缩小到接近零,但不会完全为零。
- 所有特征都会被保留,但它们的影响会被减弱。
-
Lasso:
- 系数会被缩小到零,从而实现特征选择。
- 不重要的特征的系数会被直接置零,模型变得更简单。
3. 适用场景
-
Ridge:
- 当特征之间存在高度相关性(多重共线性)时表现较好。
- 需要保留所有特征但希望降低过拟合风险时适用。
-
Lasso:
- 当数据维度较高且存在大量不相关特征时表现较好。
- 需要简化模型或进行特征选择时适用。
4. 模型复杂度
-
Ridge:
- 通过缩小系数来降低模型复杂度,但不会减少特征的数量。
-
Lasso:
- 通过将部分系数置零来减少特征的数量,从而降低模型复杂度。
5. 超参数调优
-
Ridge:
- 使用
RidgeCV进行交叉验证选择最佳的正则化强度(alpha)。
- 使用
-
Lasso:
- 使用
LassoCV进行交叉验证选择最佳的正则化强度(alpha)。
- 使用
总结
- Ridge 适合处理多重共线性问题,保留所有特征但降低它们的影响。
- Lasso 适合进行特征选择,简化模型,处理高维稀疏数据。
- 选择哪种方法取决于具体的数据特性和任务需求。如果需要同时进行特征选择和处理共线性,可以考虑使用弹性网络(ElasticNet),它结合了 L1 和 L2 正则化。
ElasticNet 是一种结合了 L1(Lasso)和 L2(Ridge)正则化的线性回归方法,它在防止过拟合方面具有独特的优势。以下是其具体效果的详细说明:
1. 特征选择与稀疏性
- 特征选择:ElasticNet 继承了 L1 正则化的特点,能够将不重要特征的系数置零,从而实现特征选择。这使得模型更加简洁,提高了模型的可解释性。
- 稀疏解:与 L2 正则化不同,ElasticNet 可以产生稀疏解,其中许多系数为零。
2. 模型稳定性与泛化能力
- 稳定性:通过 L2 正则化,ElasticNet 能够保持模型权重较小,增加模型的稳定性。
- 泛化能力:ElasticNet 通过结合 L1 和 L2 正则化,既能防止过拟合,又能保持模型的复杂度与解释性之间的平衡。
3. 处理多重共线性问题
- 多重共线性:ElasticNet 在处理具有多重共线性(特征之间高度相关)的数据时特别有用。它结合了 L1 正则化的特征选择能力和 L2 正则化的稳定性,避免了 Lasso 在高度相关特征中可能存在的选择偏好问题。
4. 高维数据处理
- 高维数据:ElasticNet 在特征数量远大于样本数量的情况下表现出色,能够有效选择重要特征并简化模型。
5. 参数调优的灵活性
- 参数调整:ElasticNet 允许通过调整 L1 和 L2 正则化的权重(通常通过参数
l1_ratio控制),在稀疏性和稳定性之间进行权衡,以适应不同的数据特性。
实例代码
以下是使用 Python 的 scikit-learn 库实现 ElasticNet 回归的示例:
from sklearn.linear_model import ElasticNet# 训练 ElasticNet 模型
elastic_net = ElasticNet(alpha=1.0, l1_ratio=0.5) # alpha 控制正则化强度,l1_ratio 控制 L1 和 L2 的比例
elastic_net.fit(X_train_scaled, y_train)# 评估模型
y_pred = elastic_net.predict(X_test_scaled)
print("ElasticNet MSE:", mean_squared_error(y_test, y_pred))
print("ElasticNet 系数:", elastic_net.coef_)
print("零系数数量:", sum(elastic_net.coef_ == 0))
总结
ElasticNet 结合了 L1 和 L2 正则化的优势,既能进行特征选择,又能保持模型的稳定性,特别适用于处理多重共线性和高维数据的情况。通过调整 alpha 和 l1_ratio 参数,可以灵活地控制模型的复杂度和稀疏性,从而在不同的数据场景下取得最佳的模型性能。
相关文章:
机器学习正则化技术:Ridge、Lasso与ElasticNet全解析
机器学习中的正则化技术 在机器学习中,正则化技术(如 Ridge 和 Lasso)主要用于解决过拟合问题,通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码: 一、正则化解决的问题 过拟合:模型在训练集表…...
数字转换(c++)
【题目描述】 如果一个数 xx 的约数和 yy (不包括他本身)比他本身小,那么 xx 可以变成 yy ,yy 也可以变成 xx 。例如 44 可以变为 33 ,11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行,…...
ESP32驱动BMP280和MQ4传感器
文章目录 前言 一、硬件准备 所需组件 连接方式: 二、软件实现 1.所需库 2.代码实现 效果演示 三、上传Qt端 前言 在物联网和环境监测应用中,传感器是获取环境数据的关键组件。本文将详细介绍如何使用ESP32微控制器同时驱动BMP280大气压力传感器…...
洛谷题单1-B2002 Hello,World!-python-流程图重构
题目描述 编写一个能够输出 Hello,World! 的程序。 提示: 使用英文标点符号;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 无 输出格式 无 输入输出样例 #1 输入 #1 无输出 #1 Hello,World!方式-print() 代码 class Solut…...
MQTT协议笔记
消息格式 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,专为低带宽、高延迟或不可靠的网络设计,广泛应用于物联网(IoT)设备之间的通信。MQTT消息体的结构遵循MQTT协议规范࿰…...
CentOS系统下安装tesseract-ocr5.x版本
CentOS系统下安装tesseract-ocr5.x版本 安装依赖包: yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手动编译安装GCC(因系统默认安装的GCC版本比较…...
“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)
🚨📢 "征服HTML引号恶魔:“完全解析手册” 📢🚨 🎯 博客引言:当引号变成"恶魔" 😱 是否遇到过这种情况: 写HTML时满心欢喜输入<div title"他…...
如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志
一、首先按照以下 指引 中的 第1、2步骤,安装一下 AGDE ,AGDE 的安装包可以在官网上找到。 UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”-CSDN博客 在执行第二步骤前,记得…...
VSCode 生成HTML 基本骨架
在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...
【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权相关工具类代码
系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端后端代码)【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...
Solr-搜索引擎-入门到精通
以下是对 Apache Solr 的简介及其常用语法的快速入门指南: 一、Solr 是什么? • 核心定位:Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台,支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能: • 全…...
07_GRU模型
GRU模型 双向GRU笔记:https://blog.csdn.net/weixin_44579176/article/details/146459952 概念 GRU(Gated Recurrent Unit)也称为门控循环单元,是一种改进版的RNN。与LSTM一样能够有效捕捉长序列之间的语义关联,通过引入两个&qu…...
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号 文章目录 【字符设备驱动开发–IMX6ULL】(二)Linux 设备号1 设备号的组成2.设备号的分配 1 设备号的组成 为了方便管理,Linux 中每个设备都有一个设备号,设…...
【大模型基础_毛玉仁】3.4 Prompt 技巧
目录 3.4 Prompt 技巧3.4.1 规范Prompt 编写1)任务说明要明确2)上下文丰富且清晰3)输出格式要规范4)排版要清晰 3.4.2 合理归纳提问1)复杂问题拆解2)追问 3.4.3 适时使用CoT1)何时使用CoT2&…...
探索PyMOL新插件NRGSuite-Qt:全面提升分子对接、结合位点预测与动力学模拟的研究效率
随着分子建模和计算生物学的快速发展,分子对接(Molecular Docking)、结合位点预测、相互作用分析以及动力学研究等领域的工具越来越重要。这些工具不仅帮助研究人员理解分子间的相互作用机制,还能加速药物设计和优化过程。NRGSuit…...
sql2022 复制 事务级别发布后无法删除
Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. 用SA用户登录执行下列语句 USE [xxxxx] GO EXEC dbo.sp_changedbowner loginame Nsa, …...
wokwi arduino mega 2560 - 键盘与LCD显示
截图: 链接: https://wokwi.com/projects/414520193913760769 代码: //cslg lcd key #include <LiquidCrystal.h> // 引入LiquidCrystal库,用于LCD显示 #include <Keypad.h> // 引入Keypad库,用于键盘输…...
Linux设置SSH免密码密钥登录
文章目录 设置SSH免密码密钥登录第一步: 生成SSH密钥对(在客户端操作)方式一:Windows 10/11 内置的 OpenSSH 客户端(推荐)常用选项:密钥算法选择建议生成秘钥 方式二:借用Xshell工具…...
深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
GPU算力哪家好?GpuGeek推出高性能GPU云服务
在人工智能和深度学习领域,GPU算力租赁已成为推动技术创新的关键因素。随着越来越多的企业和个人开发者投身于AI研究和应用开发,如何高效、灵活地获取GPU算力成为了一个亟待解决的问题。GpuGeek作为一站式AI基础设施平台,凭借其独特的优势&am…...
蓝桥杯算法实战分享
蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛,涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧,帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
掌握高效决策的核心思想!今日深入解析贪心算法的底层逻辑,聚焦区间调度与最优选择两大高频场景,结合大厂真题与严谨证明,彻底掌握“局部最优即全局最优”的算法哲学。 一、贪心算法核心思想 贪心算法(Greedy Algorit…...
构建稳健的机器学习系统:应对数据偏移挑战
构建稳健的机器学习系统:应对数据偏移挑战 1. 引言:数据偏移类型与挑战 在机器学习系统从实验室到生产环境的转变过程中,数据偏移(Data Shift)是最常见也最具挑战性的问题之一。所谓数据偏移,指的是训练数…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.3前馈网络(FFN)与激活函数(GELU)优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.3 前馈网络(FFN)与激活函数(GELU)优化1. 前馈网络(FFN)的架构设计与数学原理1.1 FFN在Transformer中的核心作用2. GELU激活函数的数学特性与优化2.1 GELU的数学形式与近似计算3. 逐行代码实现…...
3个版本的Unity项目的异同
根据搜索结果,以下是关于 SPR 3D Sample Scene(URP)、SPR Universal 3D 和 3D(Built-In Render Pipeline) 的定义及区别分析: 1. 定义与用途 SPR 3D Sample Scene(URP) 是基于 Universal Render Pipeline (URP) 的 3D 示例场景,专为展示 URP …...
组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)
一、什么是组态软件 组态软件是一种用于创建、配置和管理监控和控制系统的软件工具。组态是指不需要编写计算机程序、通过配置的方式完成工业应用开发的系统。它们通常用于工业自动化领域,用于实时监视和控制工业过程。组态软件提供了丰富的功能和工具,使…...
Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
Linux perf 命令使用指南:程序热点诊断与性能优化 perf 是 Linux 系统上一个强大的性能分析工具,它能够帮助开发者进行程序热点诊断和性能优化。下面详细介绍 perf 的使用方法。 1. perf 简介 perf (Performance Event Counters) 是 Linux 内核提供的…...
《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、背景信息 在ubuntu 22.04中,pam_tally2模块已被弃用,取而代之的是pam_faillock模块。因此…...
AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤
前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…...
Spring MVC 深度解析:原理、源码剖析与实战
Spring MVC 深度解析:原理、源码剖析与实战 在 Spring 体系中,Spring MVC 作为 Web 层的核心框架,承担着请求处理、参数解析、视图渲染等关键任务。今天,我们将深入剖析 Spring MVC 的执行流程,结合 源码分析…...
