You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于L1正则筛选特征,用Sklearn重构无正则化逻辑回归生产模型

解决方案:基于筛选后特征构建无正则化逻辑回归模型

Hey,这个场景我之前在部署生产模型的时候碰到过,刚好能给你一套清晰的步骤来实现:

1. 确认筛选后的特征数据集

既然你已经手动选好了L1正则化保留的10个特征,并且完成了对应的特征变换(比如标准化、独热编码这些),首先要把这10个特征单独提取出来作为训练数据集:

  • 如果你的数据是pandas.DataFrame,直接用列名提取最直观(避免索引混乱):
    # 假设你已经确定了10个特征的列名列表
    selected_feature_names = ['feat_a', 'feat_b', ..., 'feat_j']
    X_selected = your_transformed_df[selected_feature_names]
    
  • 如果是numpy.ndarray,可以通过L1模型的非零系数索引提取(如果你还没手动记录特征名的话):
    import numpy as np
    # model_l1是你之前训练好的L1正则化逻辑回归模型
    non_zero_coef_indices = np.where(model_l1.coef_[0] != 0)[0]
    X_selected = your_transformed_array[:, non_zero_coef_indices]
    

2. 构建无正则化的逻辑回归模型

在Scikit-learn里,要实现完全无正则化的逻辑回归,有两种可靠的方式:

方式一:直接使用penalty='none'(推荐,Sklearn 0.21+支持)

这是最直接的无正则化设置,从Sklearn 0.21版本开始支持:

from sklearn.linear_model import LogisticRegression

# 初始化无正则化模型,选择合适的solver(lbfgs适合中小规模数据)
model_no_reg = LogisticRegression(penalty='none', solver='lbfgs', max_iter=1000)
# 用筛选后的特征训练模型
model_no_reg.fit(X_selected, your_target_variable)

方式二:低版本Sklearn兼容方案(用L2正则化但设极大C值)

如果你的Sklearn版本低于0.21,不支持penalty='none',可以通过把正则化强度的倒数C设为极大值(比如1e10)来近似无正则化(C越大,正则化强度越弱,趋近于0):

model_no_reg = LogisticRegression(penalty='l2', C=1e10, solver='lbfgs', max_iter=1000)
model_no_reg.fit(X_selected, your_target_variable)

3. 验证模型效果

训练完成后,你可以做两个简单的验证:

  • 检查模型系数:确保10个特征的系数都不为零(因为没有正则化,不会被置零):
    print(model_no_reg.coef_)
    
  • 用测试集评估性能:对比这个无正则化模型和之前的L1模型的指标(比如准确率、AUC),确认符合你的生产预期。

关键注意点

一定要确保训练无正则化模型时,使用的是已经完成特征变换后的10个特征——比如如果之前用StandardScaler对特征做了标准化,那么X_selected必须是用同一个StandardScaler转换后的结果,不能重新拟合变换,否则会引入数据泄露。

内容的提问来源于stack exchange,提问作者Fungie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:44:29