#13 方案:带有调优的简单集成
#13 方案:带有调优的简单集成
作者: Ravi Ramakrishnan (Grandmaster) | 排名: 13 | 发布时间: 2023-03-21
大家好,
首先,非常感谢 Kaggle 提供这次任务,也感谢所有贡献者让这次体验变得非常棒!特别感谢 @sergiosaharovskiy、@pourchot 和 @paddykb 分享他们的公开代码。
我的方法
特征工程
- 特征构建: 使用了乘法和加法特征(例如:Mean_Integrated * SD 和 Mean_Integrated + SD)作为总特征。
- 特征选择: 使用互信息、相关性和排列重要性选择特征,为模型选择了前 25、30、32、35、40、45 个特征(最终提交包含 35 个特征)。有时我也根据排行榜探测和 CV 分数手动选择一些特征。
- 数据处理: 没有做任何显式的异常值处理和特征变换(如对数变换、幂变换、logit 等)。
- 缩放: 基于交叉验证结果,没有采用任何缩放处理。
- 原始数据: 排除了原始数据(在模型训练中 CV 分数略低)。
模型
使用了以下分类器算法:
- LGBM
- XGB
- CatBoost
- Gradient Boosting
- Histogram Gradient Boosting
- Random Forest
- Logistic Regression(带鲁棒缩放器)
- Generalized Additive Model (GAM)(感谢 @paddykb 和 @pourchot 的公开工作)
模型调优
我使用 Optuna 调整参数,并微调调整后的参数以检查对 CV 分数的影响。根据这项练习,我不得不调整一些参数(在 LGBM 和 GBM 分类器中)。在这次任务中,我没有调整 scale_pos_weight。我只调整了以下基本参数:
- learning rate(学习率)
- max_depth / depth(最大深度)
- reg_alpha
- reg_lambda
- n_estimators
模型训练
- CV 策略: Repeated Stratified KFold 10x5
- 早停轮次: 120
集成与校准
- 校准: 我仅使用保序回归 对 GAM 的结果进行了校准。
- 集成: 我使用 Optuna(1000 次试验)构建了一个集成模型。
- 权重调整: 我调整了 GAM 的权重(在最终提交中,我手动增加了它的权重,并降低了随机森林和逻辑回归的权重)。
无效的尝试
- TabNet 分类器
- 神经网络 - MLP
- 校准所有模型的所有概率预测
- 对 GAM 校准使用 Platt 缩放
本可以做得更好的地方
- 更好的特征工程: 我只使用了乘法和加法特征,本可以使用比率、对数或其他变换。
- 模型调优: 我可以更好地调优模型,而不是在大多数分类器上依赖 Optuna。
关于 GAM 的说明
根据我的工作经验,我可以断言 GAM 是一种非常适合分类和回归问题的方法。我在这次挑战中第一次在 Python 中使用 GAM,但之前经常在 SAS 中使用它。我鼓励 SAS 用户在各项任务中使用 PROC ADAPTIVEREG、PROC TRANSREG 和