作者: datadote |
发布日期: 2023-06-27 |
得票数: 13 |
竞赛排名: 第17名
仅使用1个Catboost模型的17名解决方案
| 本地交叉验证 |
私有榜 |
公开榜 |
| 0.98125 |
0.98426 |
0.97764 |
以下是我的笔记,标有星号的可能是关键区别点。
数据集:
- *使用训练数据及原始训练数据:+0.002
- 仅移除id和UID列
- 从合并的训练数据集中删除重复项
- 3个新特征。对公开排行榜似乎有帮助(+0.004),但对私有排行榜无明显差异(约0.000)
1) tmp['tratio'] = tmp['proc_temp'] / tmp['air_temp']
2) tmp['torque_mult_rspeed'] = tmp['torque'] * tmp['rspeed']
3) tmp['torque_mult_toolwear'] = tmp['torque'] * tmp['tool_wear']
- 使用LabelEncoder对类别进行编码
- 未处理数据集不平衡问题。Boosting算法应能处理此问题
- 未进行特征缩放。Boosting算法应能处理此问题
- 将数据按80%训练、20%验证的比例划分。也尝试了5折分层kfold,但80/20划分已足够,且迭代更快
- 对于最终模型,使用全部数据进行训练,并在Catboost的最佳迭代停止
建模
- *仅使用1个Catboost模型。选择Catboost对这个数据集很重要。Catboost通常比Xgboost或LightGBM略准确(尽管可能更慢)。并非总是如此,有些比赛中LightGBM表现更好。集成多个Catboost可能会更好,但我没有尝试
- *使用Optuna + Wandb进行超参数搜索,并选择最佳参数
- 连续列:['air_temp', 'proc_temp', 'rspeed', 'torque', 'tool_wear', 'tratio', 'torque_mult_rspeed', 'torque_mult_toolwear']
- 类别列:['PWF', 'pid', 'TWF', 'Type', 'OSF', 'RNF', 'HDF']
(pid = product id)
- *使用产品ID,并确保使用"cat_features"参数。(+0.013)
- *CPU精度 > GPU精度。Catboost CPU和GPU有一些不同的设置。CPU也是确定性的,而GPU不是
- 使用较小的学习率(0.025,相比默认的0.1)
- 对于Catboost,增加border_count参数可能有帮助(CPU默认为254)
最后,LightGBM应该能够接近Catboost的性能,但需要为LightGBM添加"categorical_feature"参数。我在最后几天才发现这一点。