当前位置: 首页 > article >正文

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

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.36920165
  4.8287737  58.03887471 51.15594111 31.74079304 -2.9003769   1.34150047
  4.52556366 -2.29312331 -2.13511125 19.8716682   3.25697527 -5.15247646
 -3.78437105 28.91869047]

 


总结

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

 


http://www.kler.cn/a/501160.html

相关文章:

  • ubuntu20.04 安装RTX2060驱动
  • C# 迭代,递归,回调--13
  • C#调用OpenCvSharp实现图像的开运算和闭运算
  • 深度学习中的常见初始化方法:原理、应用与比较
  • 苹果手机(IOS系统)出现安全延迟进行中如何关闭?
  • 010:传统计算机视觉之大津算法初探
  • 《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(一)
  • 解读Linux Bridge中的东西流向与南北流向
  • MySQL教程之:常见查询示例
  • TCP 套接字 方法
  • 【Linux】Linux命令
  • wow-agent 学习笔记
  • Bytebase 3.1.2 - 在 SQL 编辑器中为表、列和 PG 的视图注释显示鼠标悬浮提示
  • 了解Node.js
  • 【JavaSE】【网络协议】HTTPS
  • 《安富莱嵌入式周报》第348期:开源低功耗测试仪,开源创意万用表,续航100-300小时,开源PCB电机,自制shell和网络协议栈,开源水培自动化系统
  • MySQL核心揭秘:InnoDB存储引擎深度探索
  • 【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍
  • 【单片机学习第三课---单片机IO操作】
  • vue elemnt-ui自定义时间日期选择
  • Linux开发工具--vim编辑器-gcc/g++编译器-gdb调试器
  • 案例研究:UML用例图中的结账系统
  • 红队工具使用全解析:揭开网络安全神秘面纱一角
  • 微服务的CAP定理与数据一致性抉择
  • 算法练习7——拦截导弹的系统数量求解
  • GAMES101学习笔记(三):Rasterization 光栅化(三角形的离散化、抗锯齿、深度测试)