【python机器学习】——正则化

本文详细阐述了正则化在机器学习中的作用,包括防止过拟合、提高泛化能力、L1和L2正则项的区别(L1的稀疏性和L2的平滑性),以及如何通过Lasso回归和Ridge回归应用这两种正则化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写目录标题

  • 正则化 regularization
    • 正则化的目的
      • 过拟合和欠拟合
    • L1正则项与L2正则项
    • L1稀疏,L2平滑
  • 总结

正则化 regularization

正则化的目的

正则化是机器学习中的一种技术,主要用于减少模型的复杂度,防止过拟合,提高模型的泛化能力。过拟合是指模型在训练数据上学习得非常好,但在未知数据上表现不佳。为了避免这种情况,我们可以通过正则化来惩罚模型的参数,使得模型变得更简单。

正则化的目的主要有以下几点:

1.防止过拟合:通过限制模型的复杂度,正则化有助于防止模型在训练数据上过度拟合,从而提高模型在未知数据上的表现。

2.提高泛化能力:正则化可以使得模型在训练数据和测试数据之间取得更好的平衡,从而提高模型的泛化能力。

3.减少模型参数:正则化会使得部分参数的值变得更小,从而减少模型的参数数量,使得模型更简单。

4.加速模型训练:正则化可以减少模型的参数数量,从而加速模型的训练过程。

过拟合和欠拟合

(1) under fit:还没有拟合到位,训练集和测试集的准确率都还没有到达最高。
(2) over fit:拟合过度,训练集的准确率升高的同时,测试集的准确率反而降低。学的过
度了,做过的卷子都能再次答对,考试碰到新的没见过的题就考不好。
(3) just right:过拟合前训练集和测试集准确率都达到最高时刻。学习并不需要花费很多
时间,理解的很好,考试的时候可以很好的把知识举一反三。真正工作中我们是奔着过
拟合的状态去调的,但是最后要的模型肯定是没有过拟合的。

如下图所示:
在这里插入图片描述正则化就是防止过拟合,增加模型的鲁棒性 robust,鲁棒是 Robust 的音译,也就是强壮的意思。鲁棒性调优就是让模型拥有更好的鲁棒性,也就是让模型的泛化能力和推广能

### L1正则化的原理 L1正则化是一种通过在损失函数中引入权重系数的绝对值之和来约束模型复杂度的技术。其核心在于通过对权重施加惩罚,促使部分权重变为零,从而实现稀疏解的效果[^1]。 具体而言,在线性回归或其他监督学习任务中,L1正则化的优化目标可表示为: \[ \text{minimize } \text{MSE} + \lambda \sum_{j=1}^{p} |w_j| \] 这里的 \( w_j \) 表示第 \( j \) 个特征对应的权重,\( \lambda \) 是控制正则强度的超参数[^2]。 --- ### L1正则化的作用 #### 1. **特征选择** 由于L1正则化倾向于使一些权重精确等于0,这实际上起到了自动特征选择的功能。只有那些对预测结果贡献显著的特征会被保留下来,其余不重要的特征被赋予零权重。 #### 2. **防止过拟合** 通过减少有效参与建模的特征数量以及降低各权重的数值范围,L1正则化能够有效地缓解模型的过拟合现象[^3]。 #### 3. **提高解释性** 因为最终模型仅依赖少数几个重要特征,所以相比未经过正则化的模型更加易于理解和分析[^4]。 --- ### 几何视角下的稀疏性原因 从几何角度看,L1正则化之所以能产生稀疏解是因为它定义了一个具有尖角形状(如二维情况下的菱形)的可行域边界。相比于圆形边界的L2正则化,这种特殊的结构更有可能让最优解落在坐标轴上——此时对应维度上的权值恰好为零。 此外需要注意的是,并不是所有的初始条件都能导致完全意义上的稀疏解;当不同方向上的梯度变化幅度相近时,则可能只是单纯缩小了所有参数规模而不至于彻底消除某些特定项[^5]。 --- ### 实现方法 以下是基于Python语言的一个简单例子展示如何利用Scikit-Learn库实现带L1正则化的逻辑斯蒂回归分类器: ```python from sklearn.linear_model import LogisticRegression import numpy as np # 创建数据集 (假设二元分类问题) X = np.array([[0, 0], [1, 1]]) y = np.array([0, 1]) # 初始化带有L1正则化的Logistic Regression对象 clf = LogisticRegression(penalty='l1', solver='liblinear') # 训练模型 clf.fit(X, y) print("Coefficients:", clf.coef_) ``` 上述代码片段展示了设置`penalty='l1'`即可启用L1正则化机制,同时指定合适的求解算法比如`liblinear`支持该功能。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值