Topic:
- LASSO 回归 的 几何意义
- LASSO 代码
- LASSO 的 L1 正则项 与 岭回归 的 L2
一、LASSO回归的几何意义
与岭回归相似,LASSO 回归优化的目标函数也等价于:
FLASSO=∥y−Xw∥22
F
L
A
S
S
O
=
‖
y
−
X
w
‖
2
2
s.t.∥w∥1⩽t(1)
(1)
s
.
t
.
‖
w
‖
1
⩽
t
其中,t
t
是 λλ 对于的一个常数,这里通过限制 ∥w∥1
‖
w
‖
1
的大小来避免过拟合的发生。所以,假设我们有 2 个变量, 残差平方和 (y1−wT1x)2+(y2−wT2x)2
(
y
1
−
w
1
T
x
)
2
+
(
y
2
−
w
2
T
x
)
2
当抛物面受到 ∥w1∥1+∥w2∥1≤t
‖
w
1
‖
1
+
‖
w
2
‖
1
≤
t
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM1ATM1MjYjdTOxYTM1ITNzYzX5ITO1UTMxIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
二、LASSO 代码
LASSO 回归通过添加正则项来改进普通的最小二乘法,这里添加的是 L1
L
1
FLASSO=∥y−Xw∥22+λ∥w∥1(2)
(2)
F
L
A
S
S
O
=
‖
y
−
X
w
‖
2
2
+
λ
‖
w
‖
1
同样通过
scikit-learn
提供的 LASSO 回归方法
Lasso()
来进行数据拟合。
sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False,
copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
-
: 正则化强度,默认为 1.0。alpha
-
: 默认为 True,计算截距项。fit_intercept
-
: 默认为 False,不针对数据进行标准化处理。normalize
-
: 是否使用预先计算的 Gram 矩阵来加速计算。precompute
-
: 默认为 True,即使用数据的副本进行操作,防止影响原数据。copy_X
-
: 最大迭代次数,默认为 1000。max_iter
-
: 数据解算精度。tol
-
: 重用先前调用的解决方案以适合初始化。warm_start
-
: 强制系数为正值。positive
-
: 随机数发生器。random_state
-
: 每次迭代都会更新一个随机系数。selection
"""使用 LASSO 回归拟合并绘图
"""
from sklearn.linear_model import Lasso
alphas = np.linspace(-2,2,10)
lasso_coefs = []
for a in alphas:
lasso = Lasso(alpha=a, fit_intercept=False)
lasso.fit(x, y)
lasso_coefs.append(lasso.coef_)
plt.plot(alphas, lasso_coefs) # 绘制不同 alpha 参数下的 w 拟合值
plt.scatter(np.linspace(0,0,10), parameters[0]) # 普通最小二乘法拟合的 w 值放入图中
plt.xlabel('alpha')
plt.ylabel('w')
plt.title('Lasso Regression')