sklearn.linear_model.Lasso
(Lasso 回归,L1 正则化)
Lasso
是 sklearn.linear_model
提供的 L1 正则化回归模型,在 线性回归的基础上添加 L1 正则化项,适用于 特征选择和防止过拟合。
1. Lasso
作用
- 在
LinearRegression
基础上添加L1
正则化,可以 压缩部分特征的系数为 0(自动特征选择)。 - 适用于高维数据,当特征较多但仅部分特征重要时,Lasso 可筛选出最相关的特征。
- 可以防止过拟合,但可能导致特征丢失(因 L1 使部分系数变为 0)。
2. Lasso
代码示例
(1) 训练 Lasso 回归模型
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
# 生成数据(100 个样本,1 个特征,带噪声)
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 训练 Lasso 回归模型
model = Lasso(alpha=0.1) # 设置 L1 正则化强度
model.fit(X, y)
# 预测
y_pred = model.predict(X)
# 可视化
plt.scatter(X, y, label="真实数据")
plt.plot(X, y_pred, color="red", label="Lasso 拟合")
plt.legend()
plt.show()
解释
alpha=0.1
控制L1
正则化强度,值越大,模型越稀疏(更多特征系数变 0)。fit()
训练模型,predict()
进行预测。
3. Lasso
主要参数
Lasso(alpha=1.0, fit_intercept=True, max_iter=1000, tol=0.0001, random_state=None)
参数 | 说明 |
---|---|
alpha | L1 正则化强度(默认 1.0 ,值越大,更多特征系数变 0) |
fit_intercept | 是否计算截距(默认 True ) |
max_iter | 最大迭代次数(默认 1000 ) |
tol | 收敛容忍度(默认 0.0001 ) |
random_state | 设置随机种子,保证可复现性 |
4. 获取回归系数
print("斜率(权重):", model.coef_)
print("截距:", model.intercept_)
解释
coef_
:回归系数(斜率)。intercept_
:截距。- 如果
coef_
中部分值为0
,说明该特征被 Lasso 选择性丢弃。
5. 计算模型性能
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print("均方误差 MSE:", mse)
print("决定系数 R²:", r2)
解释
- MSE(均方误差):值越小,拟合效果越好。
- R²(决定系数):
1
表示完美拟合,0
表示无解释能力。
6. Lasso
vs. LinearRegression
vs. Ridge
模型 | 适用情况 | 正则化类型 | 特征选择 |
---|---|---|---|
LinearRegression | 普通线性回归 | 无 | 不会丢弃特征 |
Ridge | 防止过拟合 | L2 | 不会丢弃特征 |
Lasso | 自动特征选择,去掉不重要特征 | L1 | 会使部分特征系数变 0 |
示例:
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0).fit(X, y)
lasso = Lasso(alpha=0.1).fit(X, y)
print("Ridge 斜率:", ridge.coef_)
print("Lasso 斜率:", lasso.coef_)
解释
Ridge
增加L2
正则化,防止过拟合,但不会让特征权重变 0。Lasso
增加L1
正则化,部分特征权重会变成0
(特征选择)。
7. alpha
对模型的影响
import numpy as np
alphas = np.logspace(-3, 2, 5) # [0.001, 0.01, 0.1, 1, 10, 100]
for alpha in alphas:
model = Lasso(alpha=alpha)
model.fit(X, y)
print(f"alpha={alpha}, 权重: {model.coef_}")
解释
alpha
较小时(如0.001
),Lasso 近似于LinearRegression
。alpha
较大时(如100
),更多特征权重变0
(Lasso 进行特征选择)。
8. 适用场景
- 数据维度高,特征较多,但仅部分特征重要(Lasso 可自动选择特征)。
- 防止过拟合,提高模型泛化能力。
- 希望降低模型复杂度,使部分特征系数变
0
。
9. 结论
Lasso
是带 L1 正则化的线性回归,适用于特征选择,自动去掉不重要的特征。- 如果数据存在 多重共线性,且需要减少特征维度,
Lasso
比LinearRegression
和Ridge
更适用。