lasso默认不标准化,特征量纲不一致会破坏稀疏性;必须用standardscaler/robustscaler对训练集fit再transform测试集;alpha需通过lassocv交叉验证选取拐点;选中的变量应重用linearregression拟合以获可靠系数。

sklearn的Lasso默认不标准化,特征量纲不一致会直接废掉稀疏效果
很多人跑完Lasso发现系数全非零,或者重要特征没被踢掉——大概率是忘了标准化。LASSO靠L1惩罚压缩系数,但惩罚项对数值大小敏感:age(单位岁)和income(单位元)差几个数量级,模型会倾向收缩income的系数,而不是按真实重要性筛选。
实操建议:
- 必须用
StandardScaler或RobustScaler在Lasso前做拟合+变换,不能只调用fit_transform一次就扔掉scaler - 测试集也要用训练集拟合出的scaler做
transform,不能重新fit - 如果含离散编码(如one-hot),标准化可跳过,但要确认这些列没参与L1惩罚(
Lasso本身不区分类型,全当连续处理)
Lasso的alpha不是越大越稀疏,得交叉验证找拐点
alpha控制L1惩罚强度,但线性增大alpha不等于线性增加零系数个数。太小:几乎没压缩;太大:所有系数归零。关键是要找到“刚出现稳定稀疏结构”的临界值。
实操建议:
- 别手动试
alpha=0.1, 1, 10,用LassoCV自动扫alphas参数,默认5折CV,返回最优alpha_ - 看
cv_alphas_和mse_path_曲线,选mse上升前最后一个明显下降点,比最小mse对应点更鲁棒 - 如果数据量小(cv设成
LeaveOneOut(),避免CV结果抖动掩盖真实拐点
用Lasso做特征选择后,别直接拿系数当重要性排序
系数绝对值大小受标准化影响,也受alpha扰动——换一组alpha,原来排第3的特征可能变0。LASSO的稀疏性是“是否存活”,不是“谁更强”。
实操建议:
- 先固定
alpha(比如LassoCV选出的),跑多次bootstrap重采样,统计每个特征被选中的频率,>80%才算稳定入选 - 想对比重要性,改用
LassoLarsIC(BIC/AIC准则),它隐含模型复杂度权衡,系数更稳定 - 如果下游要解释性,把
Lasso选中的变量丢进普通LinearRegression再拟合,此时系数才反映真实效应方向和量级
稀疏模型预测时predict快,但coef_为零的特征仍占内存
Lasso对象的coef_永远是个完整长度的ndarray,哪怕99%是0。这对推理服务影响不大,但若要做特征工程链路导出(比如转ONNX或写入数据库),冗余零值会拖慢序列化/传输。
实操建议:
- 提取有效特征索引用
np.nonzero(model.coef_)[0],配合原始feature_names列表生成精简映射 - 导出时别存整个
model,只存intercept_、非零coef_和对应列名,体积能压到1/10以下 - 注意
fit_intercept=False时intercept_是0,但Lasso默认开启截距,别漏掉它
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











