上一篇文章介绍了,保证能用最小二乘法求解线性回归的第一种方案岭回归,本文介绍第二种方法Lasso回归,和岭回归一样,Lasso也是通过正则项,来解决多重共线性问题,不同的是,Lasso使用的正则项是系数w的L1范式,乘以正则化系数alpha

虽然Lasso算法是为了限制多重共线性而被创造出来,但人们并不使用它来抑制多重共线性,L1和L2正则化的核心差异,是他们对系数w的影响,L2可以将系数压缩到很小尽量接近0,但L1正则主导稀疏性,更容易将系数压缩到0。因为这个性质,Lasso成为了线性模型中特征选择工具的首选,可以压缩特征,而且保留可解释性。

代码示例

1、导入并拆分数据集

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

ds = load_boston()

x = ds.data
y = ds.target

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)

2、建模并查看系数

from sklearn.linear_model import LinearRegression, Ridge, Lasso

linear = LinearRegression()
linear.fit(x_train, y_train)
print(linear.coef_)
# [-1.21310401e-01  4.44664254e-02  1.13416945e-02  2.51124642e+00
#  -1.62312529e+01  3.85906801e+00 -9.98516565e-03 -1.50026956e+00
#   2.42143466e-01 -1.10716124e-02 -1.01775264e+00  6.81446545e-03
#  -4.86738066e-01]

ridge = Ridge()
ridge.fit(x_train, y_train)
print(ridge.coef_)
#[-1.18308575e-01  4.61259764e-02 -2.08626416e-02  2.45868617e+00
# -8.25958494e+00  3.89748516e+00 -1.79140171e-02 -1.39737175e+00
#  2.18432298e-01 -1.16338128e-02 -9.31711410e-01  7.26996266e-03
# -4.94046539e-01]

lasso = Lasso()
lasso.fit(x_train, y_train)
print(lasso.coef_)
# [-0.06586193  0.04832933 -0.          0.         -0.          0.86898466
#  0.01217999 -0.75109378  0.2000743  -0.01395062 -0.84602363  0.00668818
# -0.73266568]
观察对比发现,Lasso中,有3项特征系数为0,如果我们是做特征选择,可以考虑将这三项特征删除。

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/294