机器学习中的正则化

摘要:本文介绍了机器学习中用于防止过拟合的正则化技术,重点讲解了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

相关推荐
Georgeviewer3 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue3 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006344 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技4 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics4 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1234 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术4 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat5 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC5 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow
触底反弹5 小时前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试