返回列表

#1 Solution: Cross-validation and diversity win

539. Playground Series - Season 3, Episode 9 | playground-series-s3e9

开始: 2023-02-28 结束: 2023-03-13 数据算法赛
#1 解决方案:交叉验证与多样性致胜

#1 解决方案:交叉验证与多样性致胜

作者:AmbrosM (Grandmaster) | 发布时间:2023-03-14

我的最终解决方案与我在我的 EDA which makes sense 中发布的只有细微差别。它基于以下几个原则:

  1. 优化交叉验证(CV)分数,不要看公共排行榜! CV 分数基于 5407 个样本,而公共排行榜仅基于 721 个样本。在 Kaggle 比赛中,5407 个样本的平均值是一个测量值,而 721 个样本的平均值是一个随机变量。如果你想测试骰子的质量,最好扔八次而不是只扔一次。这条规则有几个后果:
    • 你不需要超过两次提交,因为你无法从公共排行榜分数中获得任何信息。好吧,我用了七次提交,因为我很好奇。
    • 不要从高分公共笔记本复制代码,除非该代码的质量体现在良好的交叉验证分数上。得分最高的公共笔记本之所以位于列表顶部,仅仅是因为它们过拟合了公共排行榜。
  2. 正确进行交叉验证: 对于本次比赛,普通的 KFold 就足够了。train_test_split 则不行。
  3. 实现一个多样化的集成!
    1. 每个人都使用梯度提升,但你需要找到好的超参数。Optuna 做不到。只需运行 Optuna,然后更改 KFold 的种子。你会发现 Optuna 找到的超参数无法适应种子的变化。我手动优化了 LGBM 的超参数。
    2. 使用不止一种梯度提升实现可以增加集成的多样性。我使用了 LightGBM 和 GradientBoostingRegressor
    3. 随机森林优化起来很简单:最重要的超参数是 min_samples_leaf
    4. 虽然基于树的算法不需要太多的特征工程,但线性回归需要。在 EDA 的偏依赖图显示了游戏的非线性后,我花了不少时间创建特征。重要的是不要仅仅添加特征并抱有最好的希望——在同一过程中,你必须删除那些不能提高交叉验证分数的特征。
  4. 记住不要针对公共排行榜优化你的集成。优化 CV 分数。
  5. AgeInDays 只有几个不同的值,它与目标的关系是高度非线性且非单调的。我将其视为分类值并进行了目标编码,用相应的平均目标值替换特征值。这种目标编码甚至对一些树模型也有帮助。

bar chart

同比赛其他方案