【漫话机器学习系列】046.弹性网络(Elastic Net)

embedded/2025/1/16 6:06:46/

8c045321c3894ce68c3ce489d1815295.jpeg

 

弹性网络(Elastic Net)

弹性网络(Elastic Net) 是一种线性回归模型正则化方法,结合了L1正则化(Lasso)和L2正则化(Ridge)的优点,解决了它们各自的缺点,尤其适用于处理具有高度相关特征或多重共线性的问题。


定义

弹性网络的目标函数如下:

eq?%5Cunderset%7B%5Cbeta%7D%7B%5Cmin%7D%20%5Cleft%28%20%5Cfrac%7B1%7D%7B2N%7D%20%5Csum_%7Bi%3D1%7D%5E%7BN%7D%20%28y_i%20-%20X_i%5ET%20%5Cbeta%29%5E2%20+%20%5Calpha%20%5Cleft%5B%20%281%20-%20%5Clambda%29%20%7C%7C%5Cbeta%7C%7C_1%20+%20%5Clambda%20%7C%7C%5Cbeta%7C%7C_2%5E2%20%5Cright%5D%20%5Cright%29

其中:

  • eq?y_i 是目标变量,eq?X_i 是特征向量。
  • eq?%5Cbeta 是回归系数。
  • eq?%7C%7C%5Cbeta%7C%7C_1%20%3D%20%5Csum%20%7C%5Cbeta_j%7C 是 L1 正则化项,控制稀疏性。
  • eq?%7C%7C%5Cbeta%7C%7C_2%5E2%20%3D%20%5Csum%20%5Cbeta_j%5E2​ 是 L2 正则化项,控制共线性。
  • eq?%5Calpha%20%3E%200 是正则化强度,决定正则化的总权重。
  • eq?%5Clambda%20%5Cin%20%5B0%2C%201%5D 控制 L1 和 L2 的权重平衡。

核心思想

弹性网络通过混合 L1 和 L2 正则化的惩罚项,既能实现特征选择(Lasso 的特性),又能有效处理相关特征或多重共线性问题(Ridge 的特性)。

  • 当 λ=1 时,弹性网络等价于 Ridge 回归。
  • 当 λ=0 时,弹性网络等价于 Lasso 回归。
  • 介于两者之间时,弹性网络能平衡稀疏性和相关特征的选择。

特点与优点

  1. 解决多重共线性问题
    对于高度相关的特征,弹性网络倾向于选择整个特征组,而不是随机选择一个(Lasso 的缺点)。

  2. 控制稀疏性
    弹性网络能够选择重要特征,同时通过 L1 正则化剔除不重要的特征,减少过拟合。

  3. 稳定性
    在高维数据中(特征数远大于样本数),弹性网络比单独使用 Lasso 或 Ridge 更稳定。


实现步骤

  1. 标准化特征:正则化项对系数的惩罚会受到特征量级的影响,因此在弹性网络中,通常需要对特征进行标准化。
  2. 确定正则化参数:使用交叉验证或其他方法选择最佳的 α 和 λ 值。
  3. 优化目标函数:使用梯度下降或坐标轴下降法进行优化。

应用场景

  1. 基因数据分析
    在基因组学中,数据维度通常极高且特征间高度相关,弹性网络能高效筛选出重要基因。

  2. 经济学预测
    在经济预测中,特征变量往往具有多重共线性,弹性网络能提高模型的鲁棒性。

  3. 高维数据建模
    在文本分析或图像处理等高维数据中,弹性网络能够选择少量关键特征,降低计算复杂度。


Python 示例

以下是用 scikit-learn 实现弹性网络的代码:

from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成数据
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建弹性网络模型
elastic_net = ElasticNet(alpha=1.0, l1_ratio=0.5, random_state=42)  # l1_ratio 控制 L1 和 L2 的权重# 模型训练
elastic_net.fit(X_train, y_train)# 模型预测
y_pred = elastic_net.predict(X_test)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)print("Mean Squared Error:", mse)
print("Coefficients:", elastic_net.coef_)

 运行结果

Mean Squared Error: 2358.5452452006302
Coefficients: [ 5.41918488 66.41213731 23.39729624  4.347319   -0.         -0.369201654.8287737  58.03887471 51.15594111 31.74079304 -2.9003769   1.341500474.52556366 -2.29312331 -2.13511125 19.8716682   3.25697527 -5.15247646-3.78437105 28.91869047]

 


总结

弹性网络通过将 L1 和 L2 正则化结合起来,克服了 Lasso 和 Ridge 的各自局限性,是一种更为鲁棒且灵活的回归方法。在处理高维、高相关性数据中,弹性网络常常表现优越,是机器学习特征选择和回归分析的重要工具。

 


http://www.ppmy.cn/embedded/154320.html

相关文章

什么是IDE,新手如何选择IDE?

IDE 是 Integrated Development Environment(集成开发环境)的缩写,它是一种软件应用程序,为程序员提供了一站式的开发环境,整合了多种工具和服务,以便高效地创建、修改、编译、调试和运行软件程序。IDE 集成…

交叉编译avahi到aarch64平台

谢绝转载 一、背景 准备学习无中心网络组网,研究如何实现无中心网络IP分配 二、环境搭建过程 找到的有参考价值的网页: https://zhuanlan.zhihu.com/p/60892150322 gcc_7.5.sh #! /bin/shexport PATH/home/ws/chain_tools/gcc-linaro-7.5.0-2019.1…

[笔记] MyBatis-Plus XML 配置详解:从基础到高级,全面提升开发效率

文章目录 一. 基础标签1. select 标签2. insert 标签3. update 标签4. delete 标签 二. 动态 SQL 标签1. if 标签2. choose-when-otherwise 标签3. where 标签4. set 标签5. trim 标签6. foreach 标签 三. 高级映射1. resultMap 标签2. sql 标签 四. 特殊功能1. bind 标签2. 特…

解决winodws server iis 下的php mkdir(): Permission denied 问题

这个问题报错原因是权限不够,解决办法如下: 1.在php安装目录下,打开配置文件php.ini 把upload_tmp_dir 前面的分号去掉。 2.给上传的文件夹添加权限 在网站的相应目录,比如目录为tmp,添加IUSR用户,并给所…

pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系

pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系 1. x.clone()示例: 2. x.detach()示例:使用场景: 3. torch.tensor(x).float()示例&#xff…

概率论考前一天

判断是不是分布函数:单调不减,右连续,F负无穷为0, F正无穷为1 判断是不是密度函数:非负性(函数任意地方都大于0),规范:积分为1

JavaScript系列(27)--安全测试与审计指南

JavaScript安全测试与审计指南 🔍 在当今的网络环境中,安全测试和审计已经成为开发过程中不可或缺的一部分。本文将深入探讨如何对JavaScript应用进行全面的安全测试和审计。 为什么需要安全测试? 🤔 💡 小贴士&…

unity——Preject3——面板基类

目录 1.Canvas Group Canvas Group 的功能 Canvas Group 的常见用途 如何使用 Canvas Group 2.代码 3.代码分析 类分析:BasePanel 功能 作用 实际应用 代码解析:hideCallBack?.Invoke(); 语法知识点 作用 虚函数(virtual)和抽象类(abstract)的作用与区别 …