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

【机器学习笔记Ⅰ】13 正则化代价函数

正则化代价函数(Regularized Cost Function)详解

正则化代价函数是机器学习中用于防止模型过拟合的核心技术,通过在原始代价函数中添加惩罚项,约束模型参数的大小,从而提高泛化能力。以下是系统化的解析:


1. 为什么需要正则化?

  • 过拟合问题:当模型过于复杂(如高阶多项式回归、深度神经网络)时,可能完美拟合训练数据但泛化性能差。
  • 解决方案:在代价函数中增加对参数的惩罚,抑制不重要的特征权重。

2. 正则化代价函数的数学形式

(1) 原始代价函数(以线性回归为例)

[
J(\mathbf{w}, b) = \frac{1}{2m} \sum_{i=1}^m ( \hat{y}^{(i)} - y^{(i)} )^2
]

(2) 加入正则化项后的代价函数

[
J_{\text{reg}}(\mathbf{w}, b) = \underbrace{\frac{1}{2m} \sum_{i=1}^m ( \hat{y}^{(i)} - y^{(i)} )^2}{\text{原始损失}} + \underbrace{\lambda \cdot R(\mathbf{w})}{\text{正则化项}}
]

  • ( \lambda ):正则化强度(超参数),控制惩罚力度。
  • ( R(\mathbf{w}) ):正则化项,常见形式为L1或L2。

3. 常见的正则化方法

(1) L2正则化(岭回归,Ridge Regression)

  • 正则化项:参数平方和(欧几里得范数)。
    [
    R(\mathbf{w}) = \frac{1}{2} |\mathbf{w}|2^2 = \frac{1}{2} \sum{j=1}^n w_j^2
    ]
  • 作用:使参数趋向于较小的值,但不强制为零。
  • 更新后的梯度下降公式
    [
    w_j := w_j - \alpha \left( \frac{\partial J}{\partial w_j} + \frac{\lambda}{m} w_j \right)
    ]

(2) L1正则化(Lasso回归)

  • 正则化项:参数绝对值之和(曼哈顿范数)。
    [
    R(\mathbf{w}) = |\mathbf{w}|1 = \sum{j=1}^n |w_j|
    ]
  • 作用:产生稀疏权重矩阵(部分参数恰好为零),自动执行特征选择。
  • 梯度更新(需使用次梯度优化):
    [
    w_j := w_j - \alpha \left( \frac{\partial J}{\partial w_j} + \frac{\lambda}{m} \text{sign}(w_j) \right)
    ]

(3) Elastic Net(弹性网络)

  • 结合L1和L2:平衡两种正则化的优势。
    [
    R(\mathbf{w}) = \lambda_1 |\mathbf{w}|_1 + \lambda_2 |\mathbf{w}|_2^2
    ]

4. 正则化的直观理解

  • L2正则化:将参数限制在一个“圆”内(平滑约束)。

  • L1正则化:将参数限制在一个“菱形”内(尖角导致稀疏性)。


5. 代码实现(Python)

(1) 使用Scikit-learn实现

from sklearn.linear_model import Ridge, Lasso# L2正则化(Ridge回归)
ridge = Ridge(alpha=1.0)  # alpha即λ
ridge.fit(X_train, y_train)# L1正则化(Lasso回归)
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)

(2) 手动实现梯度下降(L2正则化)

def gradient_descent(X, y, alpha=0.01, lambda_=0.1, epochs=1000):m, n = X.shapew = np.zeros(n)b = 0for _ in range(epochs):y_pred = X.dot(w) + b# 计算梯度(含L2正则化项)dw = (1/m) * X.T.dot(y_pred - y) + (lambda_/m) * wdb = (1/m) * np.sum(y_pred - y)# 更新参数w -= alpha * dwb -= alpha * dbreturn w, b

6. 如何选择正则化类型?

场景推荐方法理由
需要特征选择(稀疏解)L1正则化(Lasso)自动将不重要特征的权重设为零。
参数平滑约束,避免过拟合L2正则化(Ridge)适合特征间相关性高的数据。
高维数据,特征数量远大于样本Elastic Net结合L1和L2的优势。

7. 超参数λ的选择

  • λ过大:模型欠拟合(参数过度压缩,趋于零)。
  • λ过小:正则化效果弱,可能过拟合。
  • 调参方法:网格搜索(GridSearchCV)或交叉验证。
from sklearn.model_selection import GridSearchCV
params = {'alpha': [0.001, 0.01, 0.1, 1.0]}
grid = GridSearchCV(Ridge(), params, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_)

8. 正则化的数学本质

  • 贝叶斯视角:L2正则化等价于参数的高斯先验,L1等价于拉普拉斯先验。
  • 优化视角:在损失函数中添加约束条件,限制参数空间。

9. 总结

  • 核心目标:通过惩罚大权重降低模型复杂度,提升泛化能力。
  • 关键公式
    [
    J_{\text{reg}} = J(\mathbf{w}, b) + \lambda \cdot R(\mathbf{w})
    ]
  • 实践要点
    1. 数值型特征需先标准化(正则化对尺度敏感)。
    2. 逻辑回归、神经网络等模型均可应用正则化。
    3. 通过验证集性能选择最优的 ( \lambda )。

正则化是机器学习中对抗过拟合的基石技术,合理使用能显著提升模型鲁棒性!

http://www.lryc.cn/news/581707.html

相关文章:

  • [2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)
  • SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
  • Python Bcrypt详解:从原理到实战的安全密码存储方案
  • 用户中心Vue3项目开发2.0
  • 2048小游戏实现
  • 线性代数--AI数学基础复习
  • 深度学习6(多分类+交叉熵损失原理+手写数字识别案例TensorFlow)
  • Chunking-free RAG
  • Web-API-day2 间歇函数setInterval与事件监听addEvenListener
  • 【Note】《Kafka: The Definitive Guide》第四章:Kafka 消费者全面解析:如何从 Kafka 高效读取消息
  • Apache Spark 4.0:将大数据分析提升到新的水平
  • A O P
  • 金融级B端页面风控设计:操作留痕与异常预警的可视化方案
  • 深度学习篇---深度学习常见的应用场景
  • 容声W60以光水离子科技实现食材“主动养鲜”
  • [Qt] visual studio code 安装 Qt插件
  • FastAPI + Tortoise-ORM + Aerich 实现数据库迁移管理(MySQL 实践)
  • 深度学习 必然用到的 线性代数知识
  • 嵌入式 数据结构学习(五) 栈与队列的实现与应用
  • React Ref 指南:原理、实现与实践
  • 【PyTorch】PyTorch中torch.nn模块的卷积层
  • 零基础,使用Idea工具写一个邮件报警程序
  • Solidity——什么是状态变量
  • 计算机网络:(七)网络层(上)网络层中重要的概念与网际协议 IP
  • Kafka “假死“现象深度解析与解决方案
  • UI前端大数据可视化进阶:交互式仪表盘的设计与应用
  • 数据驱动实时市场动态监测:让商业决策跑赢时间
  • 【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
  • 黑马点评系列问题之实战篇02短信登录 利用资料中的mysql语句创建数据表时报错
  • 关于 栈帧变化完整流程图(函数嵌套)