机器学习中的正则化

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

相关推荐
云飞云共享云桌面2 小时前
推荐一些适合10个SolidWorks设计共享算力的服务器硬件配置
运维·服务器·前端·数据库·人工智能
柠萌f2 小时前
适合电商的 AI 内容规模化生产工具——易元 AI
人工智能
Elastic 中国社区官方博客2 小时前
Elasticsearch:使用 Base64 编码字符串加速向量摄取
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
CV@CV2 小时前
自动驾驶端到端大模型实战——从原理到工程化落地
人工智能·机器学习·自动驾驶
人肉推土机2 小时前
Clawdbot(Moltbot)源码部署全实测:从环境搭建到 WebChat 验证,避坑指南收好
人工智能·大模型·agentic·skills·clawdbot·moltbot
yhdata2 小时前
医疗零部件领域新宠:超声波精密清洗系统,市场规模近29.14亿元
大数据·人工智能
CV@CV2 小时前
自动驾驶传感器融合技术解析——L4级落地的核心支撑
人工智能·机器学习·自动驾驶
L_Jason先生2 小时前
高效利用 Coding Agent 进行规约驱动开发 (SDD):原理、实践与未来洞察
人工智能·驱动开发·知识图谱
2501_942191772 小时前
RetinaNet与伪装目标检测:提升模型识别能力的实战指南
人工智能·目标检测·目标跟踪