如何在CatBoost中使用L1正则化剔除无关特征并避免过拟合?
CatBoost中L1正则化的实现方法
CatBoost确实支持L1正则化,可用于剔除无关特征并抑制过拟合,核心通过以下参数实现:
关键参数说明
l1_reg: 直接控制L1正则化强度,取值为非负浮点数(默认0,即不启用)。增大该值会让更多特征的权重趋近于0,自动完成无关特征的筛选。model_size_reg: 组合型正则化参数,同时包含L1和L2项(公式为model_size_reg = L1*|w| + L2*w²)。若需纯L1效果,可将L2部分设为0。
Python代码示例
基础L1正则化用法
from catboost import CatBoostClassifier, Pool # 构造训练数据集(假设已准备好X_train、y_train和分类特征列cat_features) train_pool = Pool(data=X_train, label=y_train, cat_features=cat_features) # 初始化模型并设置L1正则化强度 model = CatBoostClassifier( l1_reg=1.0, # 根据业务场景调整,值越大正则化约束越强 iterations=1000, learning_rate=0.05, loss_function='Logloss', verbose=100 ) model.fit(train_pool) # 查看特征权重,权重趋近于0的即为可剔除的无关特征 feature_weights = model.get_feature_importance()
纯L1正则化(关闭L2项)
model = CatBoostClassifier( model_size_reg=0.8, # L1正则化强度 l2_leaf_reg=0.0, # 关闭L2正则化,仅保留L1效果 iterations=1000, learning_rate=0.05, verbose=100 )
注意事项
- 正则化强度需通过交叉验证调整,避免过度正则化导致模型欠拟合。
- 可通过
get_feature_importance()输出的特征权重,手动移除被L1压制的无关特征,进一步简化模型。 - 分类、回归任务中参数用法一致,仅需调整
loss_function适配任务类型。
内容的提问来源于stack exchange,提问作者mina
相关产品推荐
相关产品推荐

