L1penalized regression in neural networks: A view from
作者:禅与计算机程序设计艺术
1.简介
随着神经网络在各个领域的广泛应用带来了诸多挑战,主要体现在如何处理非线性数据以及如何有效防止过拟合等问题上
另外,在研究者们日益关注正则化项在解决过拟合问题中的作用之际
本文旨在从统计学角度探讨如何利用L1范数作为正则化手段所带来的潜在效果。文章将首先阐述相关的基础概念与术语,并详细阐述以下内容:模型的理论基础及其推导过程、算法的具体实现步骤以及相关的数学公式推导。此外,在讨论过程中还将结合实际案例展示其具体应用,并通过实验结果来分析其优势与局限性。
2.基本概念及术语
- Lasso Regression:
Lasso回归(另一种名称是L1正则化),即基于L1范数作为正则化项的回归模型。该方法通过调节模型参数的绝对值大小来降低模型复杂度,并通常采用以下形式表示:
\min_w \sum_{i=1}^N(y_i - w^Tx_i)^2 + \lambda ||w||_1
其中x_i为第i个输入向量,在第i个输出变量中对应的变量为y_i, 而参数w则是需要被估计的对象, 正则化系数\lambda\text{值}越大, 则模型的整体复杂度会相应降低; 当\lambda=0\text{时}, 则表示未施加任何正则化约束。
- Elastic Net:
Elastic Net是一种融合了L1和L2范数的线性模型,在处理高维数据时具有去噪能力的同时也能保留关键特征信息;其正则化函数形式如下所示:
\min_w \sum_{i=1}^N(y_i - w^Tx_i)^2 + r\lambda ||w||_1 + \frac{\gamma}{2}(||w||_2)^2
其中,在Ridge回归中引入了参数r代表其权重系数,在Shrinkage方法中引入了参数\gamma作为权重系数。当r\geq \gamma, 即\alpha = r - \gamma > 0时, 模型满足条件;特别地,在这种情况下:当α < 1时(即r < \gamma),Elastic Net回归实际上等同于仅使用Ridge回归;而当α > 1时(即r > \gamma$),则类似于仅采用Lasso回归的方法。
- Penalty term:
惩罚项(Penalty Term)属于该代价函数中的某些项目,并用于评估模型的复杂性水平。其主要目标是在一定程度上简化优化目标函数的过程,并在此基础上更容易获得全局最优解的过程。
- Loss function:
该损失函数用于评估模型预测值与实际值之间的差异,并用于衡量模型的预测能力。一般采用平方损失函数或对数损失函数作为评价标准。如平方损失函数为:
L(y,\hat{y})=(y-\hat{y})^2
或对数损失函数为:
L(y,\hat{y})=-log(\hat{y})
本文使用Lasso Regression,因此只考虑平方损失函数。
- Mean Square Error:
均方差(Mean Squared Error, MSE),又被称为平方差异度或残差平方和(RSS)。具体而言,则是通过将每个观测值与预测值之间的差异进行平方并求和来计算的。
MSE = \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2
其中,m为样本数量;y为真实值,h_{\theta}为模型预测值。
3.模型原理
Lasso Regression 通过求解如下优化问题:
由于LaTeX排版问题,在本节中对长公式进行了拆分显示
其中,在模型中定义了L(y, h_\theta(x))\ 表示为平方损失函数\ ,其中\ \lambda\ 代表正则化项\ ,而\ $c\ 作为容许的最大误差范围值\ 。超参数C则是模型中的一个调节参数。\ 该优化问题可基于梯度下降法或坐标轴下降法求解。\
假设输入变量为X和输出变量为Y,则模型的预测输出由\hat{Y}=H(X;\theta)表示。基于给定的训练数据集X = [x_1, x_2, \dots, x_n]^T及其对应的目标值Y = [y_1, y_2, \dots, y_n]^T ,我们定义了一个衡量预测误差的损失函数。
L(Y, \hat{Y}, \beta)=\frac{1}{2}\sum_{i=1}^{n}(Y_i-\hat{Y}_i)^2+\lambda\|\beta\|_{1}
其中,\beta 为模型的参数向量,\|\cdot\|_{1} 表示一阶范数,\lambda 为正则化系数。
对于平方损失函数,最小化问题为:
\underset{\beta}{\operatorname{minimize}} L(Y, H(X), \beta)
这里的 H(X;\theta) 被称为我们的假设函数。为了使平方损失函数达到最小值,必须满足一系列约束条件。从而要求向量 \beta 的每个分量必须等于零或某个固定数值。
4.算法过程
Lasso Regression 的求解算法大致可分为以下四步:
- 设置模型参数 \lambda 、c 以及 C 的初始值。
- 通过 BFGS/LBFGS 算法确定优化起始点 \beta。
- 调整惩罚系数 \lambda ,计算出新的惩罚系数 \lambda'。
- 重新计算模型参数:\beta := \beta - \eta [\nabla L(Y, H(X; \beta') + \lambda'\beta')]。
其中,\eta 为学习速率,\nabla L(Y, H(X; \beta^{'}) + \lambda^{'}\beta') 为模型的负梯度。
5.数学分析
5.1 一阶规范化
先引入一阶范数的概念:
\forall v\in R^n, \|v\|=max\{|v_1|,|v_2|,...,|v_n|\}
称矩阵 A=[a_{ij}] 为具有某一主对角线元素性质的矩阵。若对于所有 i\neq k 的情况有 a_{ik}=0 ,而 a_{kk}>0 ,则位于第 k 行及第 k 列的元素为主对角线元素(diagonal element)。记 D=diag(d_1,d_2,\dots,d_n) ,其中 diag 表示取主对角线元素构成的向量,则有 A≈D 。如果存在正实数 \varepsilon 和向量 \mathbf{l}\in\mathbb{R}^m 满足 f(A+\varepsilon \mathbf{l}I)\leqslant f(A)+\varepsilon \|\mathbf{l}\|_1 ,则称矩阵 A+\varepsilon \mathbf{l}I 是关于 (\varepsilon,\mathbf{l}) 近似可对角化的。
为了方便起见,记:
||A\|=max_{i,j}|a_{ij}|
5.2 分解矩阵 A
设U为矩阵A对应的奇异值分解矩阵,则有A=UDV^T。令S等于\sigma_1\sigma_2\cdots\sigma_n。
A=USV^T=US(Q\Lambda Q^T)(Q\Lambda Q^T)^{-1}
其中,
Q\in \mathbb{R}^{n\times n}属于实数域上的n\times n阶矩阵,并且是一个酉矩阵;
\Lambda被定义为一个由\lambda_1,\lambda_2,...,\lambda_n构成的对角矩阵;
而\sigma_i则通过计算Q\Lambda Q^T的第(i,i)个元素得到,并等于\sqrt{\lambda_i}。
若 rank(A)
5.3 Lasso约束
考虑 Lasso 约束下的 Lasso 最小化问题:
\underset{z}{\operatorname{minimize}} \quad \frac{1}{2}z^\top A z - b^\top z
其中,A\in R^{n\times n}, b\in R^{n}, \lambda\geqslant 0 。
由于 B=PBP^\top, 故有:
\begin{bmatrix} B\\ P^\top \end{bmatrix}=\begin{bmatrix} U\\ V \end{bmatrix}\begin{bmatrix} \sigma_1&0&\cdots&0\\ 0&\sigma_2&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\sigma_n \end{bmatrix}\begin{bmatrix} V^\top\\ I \end{bmatrix}
设 Z=\begin{bmatrix} Z_1\\ Z_2 \end{bmatrix}, Y=\begin{bmatrix} Y_1\\ Y_2 \end{bmatrix} ,其中,Z_1\in R^{p\times p} 为列满秩矩阵, Z_2\in R^{n-(p+q)}\times R^{pq} 为满秩矩阵,则有:
\begin{bmatrix} ζ\\ υ \end{bmatrix}= (\begin{bmatrix} ζ₁\\ ζ₂ \end{bmatrix})\begin{bmatrix} ξ₁\\ ξ₂\\ ⋯ \\ ξ_q \end{bmatrix}
将 A 用 Z 的 SVD 分解表示:
A=UZSV^TZ^TQ^\top
有:
The matrix A is approximately equal to a block-wise diagonal matrix, consisting of the blocks U_i and W_i, each of which is a square matrix, along with their respective diagonal elements \sigma_i. This matrix has been divided into m-n+p blocks along its diagonal, each assigned to the singular values \sigma_i, which are all non-negative real numbers.
取 \lambda=1/\sqrt{n} ,有:
矩阵A由多个行构成,在这些行中包含第i个V与括号内相应项相乘的结果;具体而言,在第一至第(n−p)个元素中分别有V_1(σ_1√n), V_2(σ_2√n), ..., V_{n−p}(σ_{n−p}√(n−p));最后一行为U的转置矩阵与Y相乘的结果再与√n相乘
特别地,在此情况下,变量 V_i 被定义为单位矩阵。当矩阵 A 的秩小于其维度数时(即 rank(A) < n),对应的量 S 可能不存在。因此,在这种情况下无法直接获得矩阵 A 的近似值。
5.4 Lasso损失函数
采用平方损失函数 \frac{1}{2}||Y-HX||^2 来实现最小化目标,在此过程中,其中 H 被定义为该模型的假设函数。为了优化预测结果的一致性与准确性需求而被引入。
||Y-HX||^2=\sum_{i=1}^{n}(y_i-h_i(x_i))^2
所以,可以使用梯度下降法来求解:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \beta^{\ell+1…
其中,P_1=-u_1\otimes u_1^\top, P_2=-u_2\otimes u_2^\top 为拉普拉斯算子。
6.代码实现
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LassoCV, LassoLarsIC
# 数据加载
iris = load_iris()
X, y = iris.data, iris.target
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Lasso Regression with Cross Validation and LarsIC
alpha_range = [1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1]
clf = LassoCV(cv=5, alphas=alpha_range).fit(X_train, y_train)
print("Best alpha using CV:", clf.alpha_)
clf_larsic = LassoLarsIC(criterion='bic', normalize=True)
clf_larsic.fit(X_train, y_train)
print("Best alpha using LarsIC:", clf_larsic.alpha_)
代码解读
7.实验验证
采用上述方法生成 Lasso 回归模型,在不同正则化参数设置及数据集分布情况下,分析其对训练误差与测试误差的影响,并关注指标如AUC值的变化情况。
7.1 比较模型性能
使用 iris 数据集进行实验。
7.1.1 iris 数据集上的 Lasso Regression
from sklearn.metrics import mean_squared_error
from matplotlib import pyplot as plt
# 设置正则化系数列表
alphas = [0.1, 1, 10, 100, 1000, None]
# 设置 Lasso Regression 模型
lr = LassoCV(cv=5, alphas=alphas)
# 训练模型并计算训练集误差
lr.fit(X_train, y_train)
mse_train = mean_squared_error(y_train, lr.predict(X_train))
print('Training set MSE:', mse_train)
# 测试模型并计算测试集误差
mse_test = mean_squared_error(y_test, lr.predict(X_test))
print('Test set MSE:', mse_test)
# 绘制模型性能图
plt.figure(figsize=(12, 6))
ax1 = plt.subplot(1, 2, 1)
ax2 = plt.subplot(1, 2, 2)
for alpha in alphas:
if alpha is not None:
lr = Lasso(alpha=alpha)
lr.fit(X_train, y_train)
mse_train = mean_squared_error(y_train, lr.predict(X_train))
mse_test = mean_squared_error(y_test, lr.predict(X_test))
else:
# penalty="none" corresponds to an ordinary least square
lr = LinearRegression()
lr.fit(X_train, y_train)
mse_train = mean_squared_error(y_train, lr.predict(X_train))
mse_test = mean_squared_error(y_test, lr.predict(X_test))
ax1.semilogy(alpha, mse_train, label=str(alpha))
ax1.semilogy(alpha, mse_test, linestyle='--')
ax2.semilogy([alpha]*2, [mse_train, mse_test], label=str(alpha))
ax1.legend(title='Regularization strength $\lambda$', loc='lower left')
ax1.set_xlabel('Alpha')
ax1.set_ylabel('MSE on training / test sets')
ax1.set_ylim(1e-5, 1e2)
ax1.grid(which='major', axis='both')
ax2.legend(loc='center right')
ax2.set_xlabel('Alpha')
ax2.set_ylabel('MSE on training / test sets')
ax2.set_ylim(1e-5, 1e2)
ax2.set_yticks([])
ax2.grid(which='major', axis='both')
plt.show()
代码解读
结果如下:
从图形中可以看出,在Lasso回归中其对模型训练误差的影响较小而对测试误差的影响较为显著当模型达到收敛状态时其值越大整体性能表现更好然而当面对迭代过程中的困难情况例如过拟合现象等此时L_{1}-norm参数成为了优化关键参数的因素之一
7.1.2 Boston Housing 数据集上的 Lasso Regression
# 从sklearn包中导入数据集
from sklearn.datasets import load_boston
# 加载波士顿房价数据集
boston = load_boston()
# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston['data'], boston['target'], test_size=0.3, random_state=42)
# 利用GridSearchCV寻找最佳正则化系数
param_grid = {'alpha': [0.1, 1, 10]}
lasso = GridSearchCV(Lasso(), param_grid, cv=5)
lasso.fit(X_train, y_train)
print('best alpha:', lasso.best_params_['alpha'])
# 训练Lasso Regression模型并计算训练集和测试集的误差
lr = Lasso(alpha=lasso.best_params_['alpha'])
lr.fit(X_train, y_train)
mse_train = mean_squared_error(y_train, lr.predict(X_train))
print('Training set MSE:', mse_train)
mse_test = mean_squared_error(y_test, lr.predict(X_test))
print('Test set MSE:', mse_test)
代码解读
结果如下:
best alpha: 1
Training set MSE: 20.54989497112804
Test set MSE: 30.652091213087185
代码解读
7.2 其他数据集上的 Lasso Regression
除了 Iris 和 Boston 以外的数据集同样非常适合进行 Lasso 回归实验。我们还可以对这些数据集上的 Lasso 回归模型进行训练误差与测试误差的比较分析,并从中选择出误差最小的模型。
8.总结与讨论
从统计学的角度探讨使用L1范数作为正则化的应用及其影响方面展开论述
本文仅限于讨论 Lasso 回归(LRR)在性能上的表现与其他回归技术相比具有独特之处;除了其他回归方法外,在某些特定情况下也有专门针对其优势的设计与优化方法;因此,在现代机器学习领域中这类方法依然占据着重要地位。
