机器学习-正则化

查看更多 - https://breezedawn.github.io/

1. 正则化

它可以改善或者减少过度拟合问题

2. 欠拟合(模型的高偏差)

欠拟合是指模型拟合程度不高,数据距离拟合曲线较远,或者模型没有很好地捕捉到数据特征,不能够很好地拟合数据。

3. 过拟合(模型的高方差)

为什么出现过拟合
  1. 特征过多
  2. 训练集数据较少
  3. 模型复杂
对过拟合的理解

如果我们拟合一个高阶多项式,那么这个函数能很好的拟合训练集能拟合几乎所有的训练数据,这就面临可能函数太过庞大的问题,即变量太多。同时如果我们没有足够的数据去约束这个变量过多的模型,就会出现过度拟合的情况。虽然训练出的模型能够很好的拟合训练集的样本数据,但很有可能无法泛化新样本。

如何解决过拟合
  • 尽量减少选取特征数量。

    后面会学到模型选择算法 ,它能够自动选择采用哪些特征变量,且自动舍弃不需要的变量

  • 正则化

    保留所有特征变量,但是减少参数 θ j \theta_j θj的大小

4. 怎么应用正则化

思想与做法

修改代价函数,从而收缩(惩罚)所有的参数值,因为我们并不知道具体的去收缩(惩罚)哪些参数,

修改后的代价函数如下:
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J\left(\theta\right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{({h_\theta}({x}^{(i)})-{y}^{(i)})^{2}+\lambda \sum\limits_{j=1}^{n}\theta_{j}^{2}]} J(θ)=2m1[i=1m(hθ(x(i))y(i))2+λj=1nθj2]
λ \lambda λ又称为正则化参数(Regularization Parameter),它能够平衡代价函数,使 θ j \theta_j θj尽可能的小。

注:根据惯例,我们的 j j j是从1开始的,也就是我们不对 θ 0 {\theta_{0}} θ0 进行惩罚。

举一个例子

我们看这个假设函数: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 h_\theta\left( x \right)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^2+\theta_{3}x_{3}^3+\theta_{4}x_{4}^4 hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44 。**通常地,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。**于是我们将修改代价函数,在其中 θ 3 {\theta_{3}} θ3 θ 4 {\theta_{4}} θ4 设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的 θ 3 {\theta_{3}} θ3 θ 4 {\theta_{4}} θ4。修改后如下 :
min ⁡ θ 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 10000 θ 4 2 ] \underset{\theta }{\mathop{\min }}\frac{1}{2m}[\sum\limits_{i=1}^{m}{\left({h}_{\theta}\left({x}^{(i)}\right)-{y}^{(i)}\right)^{2}+1000\theta_{3}^{2}+10000\theta _{4}^{2}]} θmin2m1[i=1m(hθ(x(i))y(i))2+1000θ32+10000θ42]
但是正是因为我们并不知道具体的哪一个 θ \theta θ是高次项,因此我们只能去收缩(惩罚)所有参数。

但是

如果我们令 λ \lambda λ 的值很大的话,那么 θ \theta θ(不包括 θ 0 \theta_0 θ0)都会趋近于0,这样我们所得到的只能是一条平行于 x x x轴的直线。所以对于正则化,我们要取一个合理的 λ \lambda λ 的值,这样才能更好的应用正则化。

5. 正则化线性回归

正则化代价函数

J ( θ ) = 1 2 m ∑ i = 1 m [ ( ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ) ] J\left(\theta\right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{[(({h_\theta}({x}^{(i)})-{y}^{(i)})}^{2}+\lambda \sum\limits_{j=1}^{n}{\theta _{j}^{2})]} J(θ)=2m1i=1m[((hθ(x(i))y(i))2+λj=1nθj2)]

正则化梯度下降

要使梯度下降法令正则化后的线性回归代价函数最小化,因为我们没有对 θ 0 \theta_0 θ0进行正则化,所以梯度下降算法有两种情形:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}(({h_\theta}({x}^{(i)})-{y}^{(i)})x_{0}^{(i)}) θ0:=θ0am1i=1m((hθ(x(i))y(i))x0(i))

θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}({h_\theta}({x}^{(i)})-{y}^{(i)})x_{j}^{\left(i\right)}+\frac{\lambda }{m}{\theta_j}] θj:=θja[m1i=1m(hθ(x(i))y(i))xj(i)+mλθj]

对第二个式子进行变化后,可得:
θ j : = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) {\theta_j}:={\theta_j}(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}({h_\theta}({x}^{(i)})-{y}^{(i)})x_{j}^{\left(i\right)} θj:=θj(1amλ)am1i=1m(hθ(x(i))y(i))xj(i)
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ \theta θ值减少了一个额外的值。

PS:梯度下降仍然是对 J ( θ ) J(\theta) J(θ)进行最小化,通过求导,得出梯度下降算法

正则化正规方程

在这里插入图片描述

注:图中的矩阵尺寸为 ( n + 1 ) ∗ ( n + 1 ) (n+1)*(n+1) (n+1)(n+1)

值得一提的是,哪怕此时 X X X不可逆,经过 λ \lambda λ相加变化后的矩阵将是可逆的。

6. 正则化逻辑回归

正则化代价函数

J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J\left(\theta\right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{y}^{(i)}\log \left({h_\theta}\left({x}^{(i)}\right)\right)-\left(1-{y}^{(i)} \right)\log\left(1-{h_\theta}\left({x}^{(i)}\right) \right)]}+\frac{\lambda}{2m}\sum\limits_{j=1}^{n}\theta _{j}^{2} J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2

​ ps:注意这里 λ \lambda λ的仍为 1 2 m \frac{1}{2m} 2m1

正则化梯度下降

类似地,因为我们没有对 θ 0 \theta_0 θ0进行正则化,所以梯度下降算法有两种情形:
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}(({h_\theta}({x}^{(i)})-{y}^{(i)})x_{0}^{(i)}) θ0:=θ0am1i=1m((hθ(x(i))y(i))x0(i))

θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}({h_\theta}({x}^{(i)})-{y}^{(i)})x_{j}^{\left( i \right)}+\frac{\lambda }{m}{\theta_j}] θj:=θja[m1i=1m(hθ(x(i))y(i))xj(i)+mλθj]

看起来和线性回归的一模一样,实际上我们知道这里 h θ ( x ) = g ( θ T X ) {h_\theta}\left( x \right)=g\left( {\theta^T}X \right) hθ(x)=g(θTX),所以与线性回归不同。

PS:值得注意的是, θ 0 {\theta_{0}} θ0仍然不参与其中的任何一个正则化。

注:

泛化能力(generalization ability)

泛化能力是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的模型也能给出合适的输出,该能力称为泛化能力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡泡码客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值