机器学习——正则化

问题:过拟合

算法训练结束后可能会产生两种让人不想面对的结果,一种是欠拟合,一种是过拟合。需要注意二者针对的对象都是训练数据,再结合名字就非常容易理解这两个名字的意思了。
欠拟合:即使是在训练数据上都存在较大的误差。
过拟合:在训练数据上误差非常小甚至没有误差,过度的拟合了训练数据以至于失去了数据整体上的趋势不能很好的用在真实数据上。
过拟合产生的原因主要有两个,过多的特征参数,过少的训练数据。
过多的特征参数:选择的参数中存在一些对结果没有什么贡献,捣乱居多的特征。(例如房价预测中的3阶和4阶项)
过少的训练数据:在特征参数选择过多的情况下训练数据还少了,训练起来就抓不住主要方向了就开始乱搞了。

解决方法也主要是针对这两个原因来的,其中效果又好操作起来又简单的就是增加更多高质量的训练数据了,Google不是有句话叫做”更多的数据胜过更好的算法“吗?自己感觉训练数据的增加也是现在AI技术逐步走入生活的原因,因为互联网的发展为算法提供了海量的数据作为养料。但是训练数据的获取也不是那么的容易的,特别是高质量的训练数据。
所以大佬们瞄向了另外一个原因双管齐下,就不信它还过拟合。对症下药乱七八糟的特征多了那就去掉一些没什么用的特征,具体的方法是课程中提到的Model selection algorithm。之后会学那就之后再来更新吧。直接舍弃一些特征简单粗暴,但是按照吴老师的话来说在你舍弃一些特征的同时也舍弃了一部分信息,而且这些特征收集起来也不容易舍不得怎么办。这个时候就轮到正则化方法(regularization)登场了。

方法之一:正则化

当参数太多的情况下因为搞不清楚哪个参数和结果的关联度比较小,所以正则化缩小每一个参数θ,这样得到的模型更为简单平滑。为什么参数θ小模型就布局平滑呢?平滑的模型其导数的绝对值一般来说较小,过拟合的模型一般来说比较曲折如下图所示:

例子

而对于线性模型 y=Wx y = W x 来说导数就是模型的参数本身,因此,减小参数绝对值就可以达到减小导数绝对值的效果,即可达到平滑模型、防止过拟合的效果。最终课程中得到的代价函数如下所示:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λi=1nθ2j](1) (1) J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ i = 1 n θ j 2 ]

公式右边的即为正则项,这个公式中使用的是 L2 L 2 范数作为正则项,既然有 L2 L 2 那么肯定就会有 L0 L 0 L1 L 1 了,具体的含义和区别可以参考参考资料[1]中的高票回答。除了 Lp L p 范数可以作为正则项,还存在其他的正则项,但是目前还不了解,学习了之后再更新吧。
参考资料:
机器学习中常常提到的正则化是什么意思? [1]
理解正则化项L1和L2的区别[2]

博客原文:https://blog.yinaoxiong.cn/2018/08/03/机器学习-正则化.html

### 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`支持该功能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值