tree ensemble里面最重要就是防止过拟合。
min_child_weight是叶子节点中样本个数乘上二阶导数后的加和,用来控制分裂后叶子节点中的样本个数。样本个数过少,容易过拟合。
subsample是行采样,设置的越小,每棵树之间的使用的样本数就越不相同,数学上有证明,这样模型的variance会越小。
colsample_bytree是列采样,设置的越小,树之间使用的特征差异越大,也是用来降低模型variance的。
由于我们同时训练上千个模型,所以在XGBoost里面加入了一个逻辑。对不同大小的训练数据,设置不同的树颗数。该段代码在xgboost_main.cpp中。这样做对效果提升挺明显了,如果所有的GBDT模型都设置一样的树颗数,当这个值过大时,会导致很多小训练样本的GBDT模型过拟合。当这个值过小时,又会导致大训练样本的GBDT模型欠拟合。
具体可以看这篇文章:
https://johnnygambler.github.io/2017/01/08/xgboost%E5%AE%9E%E6%88%98/