理解正则化来防止模型过拟合以及L1正则化的模拟过程
其实这个是第二次看了,重新在看另外一本书,《统计学习方法》。
迷茫,不知道看这些还有什么用,但是去看训练代码还是看不懂,到底怎么回事啊,不知道为什么要加那些模块,害(┬┬﹏┬┬)
快速过一遍这本书,然后回到论文上面来 <( ̄︶ ̄)↗[GO!]
如何理解正则化来防止模型过拟合
理解正则化如何防止模型过拟合,可以从以下几个方面进行分析:
1. 过拟合的概念
过拟合是指模型在训练数据上表现良好,但在未见的数据(测试数据)上表现不佳的现象。过拟合通常发生在模型过于复杂时,即模型具有过多的参数或者特征,使其能够“记住”训练数据中的噪声而不是学习到数据的真实模式。
2. 正则化的基本原理
正则化通过在损失函数中加入惩罚项,来限制模型的复杂度。常见的正则化方法有L1(Lasso)和L2(Ridge)正则化,它们分别通过不同方式惩罚模型参数。
L1 正则化:增加模型参数绝对值的和作为惩罚项,促使一些参数为零,从而进行特征选择。这有助于去除不重要的特征,使模型更加简洁。
L2 正则化:增加模型参数平方和作为惩罚项,鼓励模型参数的整体减小。这意味着即使模型使用了所有特征,参数的值也不会过大,从而减小对训练数据的敏感性。
3. 通过增加惩罚项调整损失函数
在正则化的情况下,模型的损失函数通常被修改为:
其中,是正则化参数,用于控制惩罚项的强度。较大的值会增加惩罚,使得模型更加简单,从而降低过拟合的风险。
4. 效果和直观理解
模型复杂度:正则化相当于在优化过程中引入了对模型复杂度的约束,促使模型在选择特征和学习参数时更加谨慎。这种谨慎使得模型更有可能学习到更具代表性的特征,而不是训练数据中的偶然模式。
泛化能力:通过正则化,模型的泛化能力得到提升,能更好地适应新的、未见的数据。这是因为正则化帮助模型更关注数据的整体结构,而非个别噪声或异常值。
5. 调节与验证
正则化参数的选择至关重要。通过交叉验证等技术,可以找到最佳的值,使得模型在训练集和验证集上都能保持良好的性能,从而达到防止过拟合的效果。
总结
正则化通过惩罚模型复杂度,有效降低了模型对训练数据的过度拟合,使得模型在未见数据上表现更加稳健。理解这一过程有助于在实际建模中选择合适的正则化策略,优化模型的性能。
L1正则化可以让模型参数的值为0的原因
L1正则化能够促使一些模型参数 的值为零的原理主要体现在其损失函数的优化过程中。以下是对这一原理的详细解释及示例。
原理解释
L1正则化通过在损失函数中加入参数的绝对值之和作为惩罚项,促使模型参数的某些值趋近于零。其损失函数形式为:
这里,是正则化强度的超参数,控制惩罚项的影响力。
绝对值的性质:绝对值函数在原点是不可导的,这意味着当优化算法(如梯度下降)试图更新参数 时,某些参数可能会直接达到零。这种情况通常发生在参数的更新过程中,惩罚项使得某些参数的更新幅度减小到零。
目标函数的几何形状:L1正则化的惩罚项形成的等高线是菱形(或正方形),与损失函数的等高线相交时,往往会在坐标轴上接触,这意味着模型的某些参数将被推至零。这是因为在最优化过程中,绝对值函数的“尖角”会导致某些参数在最优解处为零。
凸优化的效果:L1正则化的目标函数是一个凸函数,优化时容易收敛到局部最优解,进而有可能出现部分参数被收缩到零的现象。
示例
以下是一个简单的例子,说明如何通过L1正则化促使参数为零。
例子设定
假设我们有一个线性回归模型,其模型形式为:
我们用一个小的数据集来训练模型:
1 | 2 | 3 |
2 | 3 | 5 |
3 | 4 | 7 |
4 | 5 | 9 |
5 | 6 | 11 |
步骤
损失函数:
- 原始损失函数(均方误差)为:
加入L1正则化:
- 假设我们设置 ,那么加入L1正则化后的损失函数为:
训练过程:
- 在使用梯度下降等优化算法进行训练时,更新参数 和 的步骤包括计算原始损失的梯度和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.9500000e+00
:- 指数形式表示 ,说明 是接近 1.95 的非零值。
8.8817842e-17
:- 指数形式表示 ,非常接近 0,是计算中的浮点数误差。
- 实际意义上,它等价于 0,表示模型已经剔除了该特征。
正则化的效果
普通线性回归:
不进行正则化的情况下,两个特征可能都会得到较大的非零系数。例如:Linear Regression Coefficients: [1. 1.]
表示两个特征对 的贡献相等。
L1 正则化(Lasso):
在 L1 正则化下,模型会自动选择对目标值影响大的特征,而忽略其他不重要的特征,可能得到:L1 Regularization Coefficients: [1.95 0.]
表示 对 几乎没有贡献,被压缩为 0。
模型解释
最终,带 L1 正则化的模型公式可以写为:
这说明模型完全依赖 来预测 ,从而实现了特征选择和模型的简化.