上一篇文章介绍了,保证能用最小二乘法求解线性回归的第一种方案岭回归,本文介绍第二种方法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://ichenhua.cn/read/294
- 上一篇:
- 贪心算法与找零问题
- 下一篇:
- Sklearn多项式回归拟合三角函数曲线