【scikit-learn】sklearn.linear_model.Lasso 类:Lasso 回归(L1 正则化)

sklearn.linear_model.Lasso(Lasso 回归,L1 正则化)

Lassosklearn.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)
参数说明
alphaL1 正则化强度(默认 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 正则化的线性回归,适用于特征选择,自动去掉不重要的特征
  • 如果数据存在 多重共线性,且需要减少特征维度,LassoLinearRegressionRidge 更适用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值