机器学习中的正则化

摘要:本文介绍了机器学习中用于防止过拟合的正则化技术,重点讲解了L1和L2正则化。L1正则化通过添加权重绝对值之和的惩罚项,促使模型产生稀疏权重;L2正则化则通过权重平方和的惩罚项减小权值大小。文章分别提供了使用scikit-learn库实现这两种正则化的Python代码示例,并展示了在波士顿房价数据集上的应用效果。正则化能有效控制模型复杂度,提高泛化能力。

目录

机器学习中的正则化

[L1 正则化](#L1 正则化)

示例

输出结果

[L2 正则化](#L2 正则化)

示例

输出结果


机器学习中的正则化

在机器学习中,正则化是一种用于防止过拟合的技术 ------ 过拟合指模型过于复杂,对训练数据拟合度过高,但无法泛化到新的、未见过的数据。正则化会在损失函数中引入惩罚项,促使模型采用更小的权重和更简单的结构,从而减少过拟合。

机器学习中常用的正则化技术有多种,包括 L1 正则化、L2 正则化、丢弃正则化(dropout)和早停法(early stopping)。本文将重点介绍最常用的 L1 和 L2 正则化。

L1 正则化

L1 正则化又称套索正则化(Lasso regularization),其核心是在损失函数中添加一个惩罚项,该惩罚项等于所有权重绝对值的和。L1 正则化的惩罚项公式为:λ × Σ |wᵢ|其中,λ 是控制正则化强度的超参数,wᵢ是模型中的第 i 个权重。

L1 正则化的作用是促使模型产生稀疏权重,即剔除对输出影响极小或无影响的权重,进而简化模型结构、减少过拟合。

示例

在 Python 中,可通过 scikit-learn 库的 Lasso 类实现 L1 正则化,以下是用于线性回归的示例代码:

python 复制代码
from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = load_boston()
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)
# 创建带有L1正则化的Lasso模型(alpha=0.1)
lasso = Lasso(alpha=0.1)
# 在训练集上训练模型
lasso.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = lasso.predict(X_test)
# 计算预测结果的均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)

输出结果

运行上述代码后,将得到以下输出:均方误差: 25.155593753934173

L2 正则化

L2 正则化又称岭回归正则化(Ridge regularization),其惩罚项为所有权重平方的和。L2 正则化的惩罚项公式为:λ × Σ (wᵢ)²其中,λ 是控制正则化强度的超参数,wᵢ是模型中的第 i 个权重。

L2 正则化的作用是促使模型采用小权重,即减小所有权重的数值大小,从而平滑模型输出、减少过拟合。

示例

在 Python 中,可通过 scikit-learn 库的 Ridge 类实现 L2 正则化,以下是用于线性回归的示例代码:

python 复制代码
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
import numpy as np

# 加载波士顿房价数据集
boston = load_boston()
# 创建特征数组和目标数组
X = boston.data
y = boston.target
# 对特征数据进行标准化处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义带有L2正则化的岭回归模型(alpha=0.1)
model = Ridge(alpha=0.1)
# 在训练集上训练模型
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算预测结果的均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差: ", mse)

输出结果

运行上述代码后,将得到以下输出:均方误差: 24.29346250596107

相关推荐
用户43567829363718 分钟前
五线并行认知架构:从算力内卷到思考秩序的底层革命
人工智能
一 铭24 分钟前
WrenAI 详解:给 AI Agent 的开源 GenBI 引擎
人工智能·开源
say_fall26 分钟前
【AI大模型】MCP 模型上下文协议:客户端-服务器架构、JSON-RPC 消息与能力协商、工具发现与调用链路、与函数调用的分工
服务器·人工智能·架构
早起CaiCai44 分钟前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
周杰伦的稻香1 小时前
AI 助手 2.0:多轮对话、卡片化与文章页感知
人工智能
Martina_03211 小时前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
狒狒AI1 小时前
手绘白板动画的生产线拆解:AI 出图、笔迹对齐、镜头渲染七道工序(附 21 个开源脚本)
人工智能·aigc
用户2763965765101 小时前
上手 GitHub 官方 Spec Kit:AI 编码别再裸奔,先写 spec 再出码,SDD规约开发
人工智能
Lucas_coding1 小时前
【Agent】Agent 知识地图:核心概念、工程方法与产品生态
人工智能
方方洛1 小时前
ray教程-28-附录G-CICD与Slurm与云上调度
人工智能·分布式·机器学习