首页 > 编程笔记 > Python笔记 阅读:5

Lasso回归算法详解(Python实现)

Lasso 回归与岭回归非常相似,它们的差别在于使用了不同的正则化项,最终都实现了约束参数从而防止过拟合的效果。

Lasso 回归应用广泛还有另一个原因,就是 Lasso 回归能够将一些作用比较小的特征的参数训练为 0,从而获得稀疏解。也就是说用这种方法,在训练模型的过程中实现了降维(特征筛选)的目的。


图 1 使用 sklearn 训练岭回归

Lasso 回归的代价函数为:


其中,w 是长度为 n 的向量,不包括截距项的系数 θ0,θ 是长度为 n+1 的向量,包括截距项的系数 θ0,m 为样本数,n 为特征数。‖w‖1 表示参数 w 的 l1 范数,表示距离的函数。如果 w 表示三维空间中的一个点(x,y,z),那么 ‖w‖1=|x|+|y|+|z|,即各个方向上的绝对值(长度)之和。

上式的梯度为:


其中,sign(θi) 由 θi 的符号决定:θi>0,sign(θi)=1;θi=0,sign(θi)=0;θi<0,sign(θi)=-1。

【实例】直接使用 sklearn 中的函数实现 Lasso 回归。
from sklearn.linear_model import Lasso

lamb=0.025
lasso_reg=Lasso(alpha=lamb)
lasso_reg.fit(X_poly_d, y)
print(lasso_reg.intercept_, lasso_reg.coef_)
print(L_theta_new(intercept=lasso_reg.intercept_, coef=lasso_reg.coef_.T, X=X_poly_d, y=
y, lamb=lamb))
最终获得的参数以及代价函数的值为:

[2.86435179][-0.00000000e+00 5.29099723e-01 -3.61182017e-02 9.75614738e-02
1.61971116e-03 -3.42711766e-03 2.78782527e-04 -1.63421713e-04
-5.64291215e-06 -1.38933655e-05 1.02036898e-06]
0.03205668191282935


X_plot=np.linspace(-3, 2, 1000).reshape(-1, 1)
X_plot_poly=poly_features_d.fit_transform(X_plot)
h=np.dot(X_plot_poly, lasso_reg.coef_.T)+lasso_reg.intercept_
plt.plot(X_plot, h, 'r-')
plt.plot(X, y, 'b.')
plt.show()    #效果如下图所示

图 4 Lasso 回归

图 4 是目前在 degree=11 的情况下得到的最好模型。

相关文章