理解正则化来防止模型过拟合以及L1正则化的模拟过程


理解正则化来防止模型过拟合以及L1正则化的模拟过程

其实这个是第二次看了,重新在看另外一本书,《统计学习方法》。
迷茫,不知道看这些还有什么用,但是去看训练代码还是看不懂,到底怎么回事啊,不知道为什么要加那些模块,害(┬┬﹏┬┬)
快速过一遍这本书,然后回到论文上面来 <( ̄︶ ̄)↗[GO!]

如何理解正则化来防止模型过拟合

理解正则化如何防止模型过拟合,可以从以下几个方面进行分析:

1. 过拟合的概念

过拟合是指模型在训练数据上表现良好,但在未见的数据(测试数据)上表现不佳的现象。过拟合通常发生在模型过于复杂时,即模型具有过多的参数或者特征,使其能够“记住”训练数据中的噪声而不是学习到数据的真实模式。

2. 正则化的基本原理

正则化通过在损失函数中加入惩罚项,来限制模型的复杂度。常见的正则化方法有L1(Lasso)和L2(Ridge)正则化,它们分别通过不同方式惩罚模型参数。

  • L1 正则化:增加模型参数绝对值的和作为惩罚项,促使一些参数为零,从而进行特征选择。这有助于去除不重要的特征,使模型更加简洁。

  • L2 正则化:增加模型参数平方和作为惩罚项,鼓励模型参数的整体减小。这意味着即使模型使用了所有特征,参数的值也不会过大,从而减小对训练数据的敏感性。

3. 通过增加惩罚项调整损失函数

在正则化的情况下,模型的损失函数通常被修改为:

其中,是正则化参数,用于控制惩罚项的强度。较大的值会增加惩罚,使得模型更加简单,从而降低过拟合的风险。

4. 效果和直观理解

  • 模型复杂度:正则化相当于在优化过程中引入了对模型复杂度的约束,促使模型在选择特征和学习参数时更加谨慎。这种谨慎使得模型更有可能学习到更具代表性的特征,而不是训练数据中的偶然模式。

  • 泛化能力:通过正则化,模型的泛化能力得到提升,能更好地适应新的、未见的数据。这是因为正则化帮助模型更关注数据的整体结构,而非个别噪声或异常值。

5. 调节与验证

正则化参数的选择至关重要。通过交叉验证等技术,可以找到最佳的值,使得模型在训练集和验证集上都能保持良好的性能,从而达到防止过拟合的效果。

总结

正则化通过惩罚模型复杂度,有效降低了模型对训练数据的过度拟合,使得模型在未见数据上表现更加稳健。理解这一过程有助于在实际建模中选择合适的正则化策略,优化模型的性能。

L1正则化可以让模型参数的值为0的原因

L1正则化能够促使一些模型参数 的值为零的原理主要体现在其损失函数的优化过程中。以下是对这一原理的详细解释及示例。

原理解释

L1正则化通过在损失函数中加入参数的绝对值之和作为惩罚项,促使模型参数的某些值趋近于零。其损失函数形式为:

这里,是正则化强度的超参数,控制惩罚项的影响力。

  1. 绝对值的性质:绝对值函数在原点是不可导的,这意味着当优化算法(如梯度下降)试图更新参数 时,某些参数可能会直接达到零。这种情况通常发生在参数的更新过程中,惩罚项使得某些参数的更新幅度减小到零。

  2. 目标函数的几何形状:L1正则化的惩罚项形成的等高线是菱形(或正方形),与损失函数的等高线相交时,往往会在坐标轴上接触,这意味着模型的某些参数将被推至零。这是因为在最优化过程中,绝对值函数的“尖角”会导致某些参数在最优解处为零。

  3. 凸优化的效果:L1正则化的目标函数是一个凸函数,优化时容易收敛到局部最优解,进而有可能出现部分参数被收缩到零的现象。

示例

以下是一个简单的例子,说明如何通过L1正则化促使参数为零。

例子设定

假设我们有一个线性回归模型,其模型形式为:

我们用一个小的数据集来训练模型:

1 2 3
2 3 5
3 4 7
4 5 9
5 6 11

步骤

  1. 损失函数

    • 原始损失函数(均方误差)为:
  2. 加入L1正则化

    • 假设我们设置 ,那么加入L1正则化后的损失函数为:
  3. 训练过程

    • 在使用梯度下降等优化算法进行训练时,更新参数 的步骤包括计算原始损失的梯度和L1惩罚的梯度。
    • 由于L1正则化的特性,当优化算法调整 时,某些参数的值可能会被推到零。例如,如果 的影响相对较小,优化过程中可能会发现保持 能够显著降低损失。

结果

经过多次迭代,最终可能得到 ,这意味着在这个特定的训练中,特征 对目标变量 的预测并没有显著贡献,模型将其完全忽略。

总结

L1正则化通过惩罚参数的绝对值,促使某些参数的值为零,这主要源于其损失函数的几何特性和优化过程中的特性。通过训练,模型能够自动选择对预测最有用的特征,从而提高其在未见数据上的泛化能力。

代码示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.linear_model import LinearRegression

# 生成数据
np.random.seed(0)
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([3, 5, 7, 9, 11])

# 定义L1正则化强度
lambda_l1 = 0.1

# 绘制损失函数的等高线
def plot_contours(lambdas):
    w1_range = np.linspace(-5, 5, 100)
    w2_range = np.linspace(-5, 5, 100)
    W1, W2 = np.meshgrid(w1_range, w2_range)

    # 计算损失值
    loss = np.zeros(W1.shape)
    for i in range(len(X)):
        loss += (y[i] - (W1 * X[i, 0] + W2 * X[i, 1])) ** 2

    loss = loss / len(X) + lambdas * (np.abs(W1) + np.abs(W2))  # 添加L1惩罚

    plt.figure(figsize=(10, 8))
    contour = plt.contour(W1, W2, loss, levels=np.logspace(0, 4, 20), cmap='viridis')
    plt.clabel(contour, inline=True, fontsize=8)
    plt.title('Loss Contours with L1 Regularization')
    plt.xlabel('w1')
    plt.ylabel('w2')

    # 绘制L1惩罚的约束
    plt.plot([lambda_l1, -lambda_l1], [0, 0], 'r--', label='L1 constraint')
    plt.plot([0, 0], [lambda_l1, -lambda_l1], 'r--')
    plt.fill_betweenx(np.linspace(-lambda_l1, lambda_l1, 100), -lambda_l1, lambda_l1, alpha=0.1, color='red')

    plt.xlim(-5, 5)
    plt.ylim(-5, 5)
    plt.axhline(0, color='black', lw=0.5)
    plt.axvline(0, color='black', lw=0.5)
    plt.legend()
    plt.grid()
    plt.show()

# 训练线性回归模型
model = LinearRegression()
model.fit(X, y)
print(f'Linear Regression Coefficients: {model.coef_}')

# 训练L1正则化的模型
lasso_model = Lasso(alpha=lambda_l1)
lasso_model.fit(X, y)
print(f'L1 Regularization Coefficients: {lasso_model.coef_}')

# 绘制等高线
plot_contours(lambda_l1)

Output

Linear Regression Coefficients: [1. 1.]
L1 Regularization Coefficients: [1.9500000e+00 8.8817842e-17]

这个输出的含义是,经过 L1 正则化(Lasso 回归)后,模型的回归系数为:

  • 1.9500000e+00:第一个特征 的回归系数大约为 1.95,表示这个特征对预测目标 有较大的影响。
  • 8.8817842e-17:第二个特征 的回归系数非常接近于 0,这个值可以被认为是数值精度误差。实际上,L1 正则化已经将该特征的系数压缩为 0,表明 对目标值 几乎没有影响,模型忽略了这个特征。

为什么第二个系数接近于 0?

这正是 L1 正则化 的作用!

  • L1 正则化通过在损失函数中添加 惩罚项,鼓励不重要的特征权重 接近 0 或直接为 0。
  • 在这个例子中,模型通过正则化发现 对预测目标 的影响较小,因此将其系数 压缩到接近 0。

数值解释

  1. 1.9500000e+00

    • 指数形式表示 ,说明 是接近 1.95 的非零值。
  2. 8.8817842e-17

    • 指数形式表示 ,非常接近 0,是计算中的浮点数误差。
    • 实际意义上,它等价于 0,表示模型已经剔除了该特征。

正则化的效果

  • 普通线性回归
    不进行正则化的情况下,两个特征可能都会得到较大的非零系数。例如:

    Linear Regression Coefficients: [1. 1.]

    表示两个特征对 的贡献相等。

  • L1 正则化(Lasso)
    在 L1 正则化下,模型会自动选择对目标值影响大的特征,而忽略其他不重要的特征,可能得到:

    L1 Regularization Coefficients: [1.95 0.]

    表示 几乎没有贡献,被压缩为 0。


模型解释

最终,带 L1 正则化的模型公式可以写为:

这说明模型完全依赖 来预测 ,从而实现了特征选择和模型的简化.


文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录