调整随机种子和取平均
ngram(ngram_range(1, 3))固定
random_state=4:0.473048
train-mlogloss:0.06956 val-mlogloss:0.298036
random_state=42:0.472576
train-mlogloss:0.07944 val-mlogloss:0.297976
random_state=8:0.474908
train-mlogloss:0.072324 val-mlogloss:0.313219
random_state=0:0.473606
train-mlogloss:0.061369 val-mlogloss:0.285387
四个随机种子结果取平均:0.471909
- 结果平均之后效果更好的原因
随机种子不同,生成的训练集和验证集不同,数据的分布变得不一样了,同样的 xgboost 模型,学习到的分布规律不同,四个结果取平均值后模型的泛化能力更好,对没有遇到过的线上的测试集有更好的预测效果。
修改 xgboost 参数 subsample
ngram(ngram_range(1, 3))固定,random_state=42 固定
subsample=0.8(默认设置参数):0.472576
train-mlogloss:0.07944 val-mlogloss:0.297976
subsample=0.7:0.474967
train-mlogloss:0.073961 val-mlogloss:0.297218
subsample=0.9:0.472149
train-mlogloss:0.085089 val-mlogloss:0.296884
subsample=1.0:0.471710
train-mlogloss:0.0727 val-mlogloss:0.300373
- 推测结论
subsample
参数用于训练模型的子样本占整个样本集合的比例。如果设置为 0.5 则意味着 xgboost 将随机的冲整个样本集合中随机的抽取出 50% 的子样本建立树模型,这能够防止过拟合。选用所有样本效果最好,应该是因为训练集数据量并不够多,模型处于欠拟合的状态,增加数据量会使模型效果更好。
阅读代码和调参经验
拿到代码先跑一遍看能不能跑通,一般遇到的问题就是没有安装 python 库、文件路径或者版本问题,在网上搜索之后一般比较容易解决。能得出结果之后先大致浏览一遍代码,知道每部分大概的作用是什么,了解代码的执行流程。之后认真阅读每一部分的代码的时候比较需要时间,看不懂和没接触过的函数调用之类的一方面在网上查函数的作用和需要的参数,另一方面在编译器或者 jupyter 里面一句一句运行,看代码的运行过程和得到的结果,并且做好注释或者记笔记。认真阅读完代码之后应该就对整个的代码有了比较细致的了解。
需要优化模型调整参数的时候,先多搜索并且思考优化的思路,然后固定其他参数调整某一个参数,及时记录结果并且思考结果背后可能的原因。多学习一些 trick,从得到的结果能够更好地了解要解决的问题和所使用的模型。