589. Playground Series - Season 3, Episode 26 | playground-series-s3e26
感谢PS3 2023系列比赛,这一直是测试新模型和想法、与旧模型进行基准测试的有趣且良好的领域!比赛开始顺利,结束也同样精彩,在PS3E1中获得第1名,在这次比赛中获得第4名。整个系列赛共同点是获得的宝贵知识和洞察。
正如这篇帖子所暗示的,XGB在分类任务中表现优异,这也是我们的基础思路。
关键在于使用堆叠方法,结合多个其他顶级解决方案的OOF(Out-of-Fold)预测结果,并将XGB作为元模型来训练堆叠预测值加上原始特征。同时尽量避免对每个解决方案过度调优,以降低过拟合风险,而是将预测结果作为额外特征用于最终的堆叠训练。
许多解决方案采用了相同的小幅特征工程,如下所示,其余特征工程保持不变:
train_df['Age_Group'] = pd.cut(train_df['Age'], bins=[9000, 15000, 20000, 25000, 30000], labels=['A', 'B', 'C', 'D']) train_df['Log_Age'] = np.log1p(train_df['Age']) scaler = MinMaxScaler() train_df['Scaled_Age'] = scaler.fit_transform(train_df['Age'].values.reshape(-1, 1))
使用AutoGluon最新预发布版本1.0.1b20231208,默认启用零样本HPO。训练框架使用了以下加权模型集成。我也尝试了蒸馏和伪标签技术,但效果不佳。
| ID | 模型名称 | 分数 | 评估指标 | 训练时间 | 推理时间 | 折叠数 | 是否使用 |
|---|---|---|---|---|---|---|---|
| 0 | WeightedEnsemble_L2 | -0.436142 | log_loss | 505.38 | 0.004281 | 2 | 是 |
| 1 | XGBoost_r89_BAG_L1 | -0.441355 | log_loss | 19.33 | 0.470275 | 1 | 是 |
| 2 | CatBoost_r137_BAG_L1 | -0.441618 | log_loss | 115.86 | 0.138598 | 1 | 是 |
| 3 | CatBoost_r50_BAG_L1 | -0.442764 | log_loss | 78.54 | 0.266119 | 1 | 是 |
| 4 | LightGBM_r130_BAG_L1 | -0.443168 | log_loss | 49.68 | 1.180046 | 1 | 是 |
| 5 | XGBoost_r33_BAG_L1 | -0.451191 | log_loss | 68.16 | 3.457726 | 1 | 是 |
| 6 | RandomForestEntr_BAG_L1 | -0.475263 | log_loss | 3.05 | 0.428620 | 1 | 是 |
| 7 | NeuralNetTorch_r79_BAG_L1 | -0.482747 | log_loss | 66.30 | 0.301830 | 1 | 是 |
| 8 | NeuralNetFastAI_r145_BAG_L1 | -0.489281 | log_loss | 94.55 | 0.755018 | 1 | 是 |
训练了LightAutoML 0.3.8b1版本,训练框架使用了以下加权模型集成:
[16:19:15] 模型描述:
新对象的最终预测 (level 0) =
0.06558 * (5个Lvl_0_Pipe_0_Mod_0_LightGBM模型的平均值) +
0.17057 * (5个Lvl_0_Pipe_0_Mod_1_Tuned_LightGBM模型的平均值) +
0.27900 * (5个Lvl_0_Pipe_0_Mod_2_CatBoost模型的平均值) +
0.48485 * (5个Lvl_0_Pipe_0_Mod_3_Tuned_CatBoost模型的平均值)
[16:19:15] ==================================================
[16:19:15] 融合: 以相等权重开始优化,分数为 -0.4164338072355177
使用标准设置训练了AutoXGB 5折交叉验证,但加入了额外的特征。
https://www.kaggle.com/code/mattop/ps-s3-e26-lgbm-xgb-preprocessing-fasteda
重新训练了笔记本并保存了XGB和LGBM的OOF结果。注意到一个良好的本地CV分数,可用于堆叠以及作为自建模型的多样化模型。
训练了多个其他SOTA解决方案和想法,例如使用旧竞赛中的顶级解决方案(多分类和二分类),分别训练每个类别并使用预测结果作为额外特征。效果良好,但以下四个解决方案已足够。
我随后训练了最终的20折XGB模型作为元模型,使用原始特征、额外创建的特征以及OOF预测结果,CV分数和排行榜得分都得到了提升。我还训练了一个二级堆叠方法,使用多个测试过的堆叠XGB模型,作为第二次提交的集成替代方案。
就是这样!Happy Kaggeling!