[机器学习复习笔记] 岭回归、LASSO回归

发布时间 2023-11-09 09:43:41作者: Amαdeus

岭回归、LASSO回归

1. 岭回归

1.1 岭回归 L2正则化

在之前的 中,使用 最小二乘法求解线性回归问题 时,讨论到了 \(X^TX\) 是否可逆。

最小二乘法得到的解析解为:

\[\theta = (X^TX)^{-1}X^Ty \]

此时只有 \(X\) 列满秩 才有解,即 \(\text{rank}(X) = \text{dim}(X)\)

有时候,数据的 特征数量 \(d\) 大于 样本数量 \(n\),此时 无法满足列满秩 ;即便满足 \(X\) 列满秩,如果 数据特征之间的相关性比较大,会使得最小二乘法求解不稳定,\(X^TX\) 的行列式接近于 \(0\)。此时就需要给 损失函数 添加一个 惩罚项 \(\frac{\lambda}{2} ||\theta||^2_2\),即 \(\frac{\lambda}{2}\sum_{j = 1}^{d}\theta_j^2\),称作 L2正则化\(\lambda\)正则化力度)。

此时,损失函数 及其 偏微分 如下:

\[E = \frac{1}{2}\sum_{i = 1}^{n}(y^{(i)} - f_{\theta}(x^{(i)}))^2 + \frac{\lambda}{2}\sum_{j = 1}^d\theta_j^2 \]

\[\frac{\partial E}{\partial \theta_j} = \sum^n_{i=1}(f_{\theta}(x^{(i)} - y^{(i)}))x^{(i)}_j + \lambda \theta_j \]

可以将上面的式子 向量化表示

\[E = \frac{1}{2}(y - X\theta)^T(y - X\theta) + \frac{\lambda}{2}\theta^T\theta \]

其中 \(X \in \mathbb{R}^{n \times d}\), \(\theta \in \mathbb{R}^{d \times 1}\), \(y \in \mathbb{R}^{n \times 1}\).

损失函数拆开然后求偏微分:

\[\begin{split} E & = \frac{1}{2}(y^T - \theta^TX^T)(y - X\theta) + \frac{\lambda}{2}\theta^T\theta \\\\ & = \frac{1}{2}(y^Ty - \theta^TX^Ty - y^TX\theta + \theta^TX^TX\theta) + \frac{\lambda}{2}\theta^T\theta \\\\\\ \frac{\partial E}{\partial \theta} & = \frac{1}{2}(-X^Ty - X^Ty + 2X^TX\theta) + \lambda\theta \\\\ & = X^T(X\theta - y) + \lambda\theta \end{split} \]

令微分为0,得到解析解:

\[\begin{split} \frac{\partial E}{\partial \theta} & = X^T(X\theta - y) + \lambda\theta \\\\ & = -X^Ty + X^TX\theta + \lambda\theta \\\\ & = 0 \\\\\\ \theta &= (X^TX + \lambda I)^{-1}X^Ty \end{split} \]

其中 \(I\)单位矩阵 (主对角线元素全部为1,其余元素全部为0)


1.2 梯度下降法求解岭回归

岭回归 中的 参数更新表达式

\[\theta_j := \theta_j - \eta \sum_{i=1}^n(f_{\theta}(x^{(i)} - y^{(i)}))x^{(i)}_j - \eta\lambda \theta_j \]

向量化表示参数更新表达式

\[\theta := \theta - \eta X^T(X\theta - y) - \eta\lambda\theta \]


1.3 岭回归 代码

# 岭回归解析解
def ridge_reg(x, y, lam=0.2):
    deno = X.T * X + np.eye(X.shape[1]) * lam
    return deno.I * (X.T * Y)

2. LASSO回归

2.1 LASSO回归 L1正则化

与岭回归相似,LASSO回归 同样是通过添加正则项来改进朴素最小二乘法,其采用的时 L1正则化,也就是添加了 惩罚项 \(\frac{\lambda}{2}||\theta||_1\),即 \(\frac{\lambda}{2}\sum_{j = 1}^d|\theta_j|\) .

此时,损失函数 如下:

\[E = \frac{1}{2}\sum_{i = 1}^{n}(y^{(i)} - f_{\theta}(x^{(i)}))^2 + \frac{\lambda}{2}\sum_{j = 1}^d|\theta_j| \]

求偏微分:

\[\frac{\partial E}{\partial \theta_j} = \sum^n_{i=1}(f_{\theta}(x^{(i)}) - y^{(i)})x^{(i)}_j + \begin{cases} -\lambda & \theta_j < 0 \\ [-\lambda, \lambda] & \theta_j = 0 \\ \lambda & \theta_j > 0 \end{cases} \]

令偏微分为0:

\[\theta_k = \begin{cases} \frac{p_k + \frac{\lambda}{2}}{z_k} & p_k < \frac{\lambda}{2} \\ 0 & -\frac{\lambda}{2} \le p_k \le \frac{\lambda}{2} \\ \frac{p_k - \frac{\lambda}{2}}{z_k} & p_k > \frac{\lambda}{2} \end{cases} \]


参考文章

机器学习算法实践-岭回归和LASSO

岭回归、LASSO回归(包括公式推导)