xgboost:防止过拟合的方法收缩和特征列、采样
xgboost除了第2.1节中提到的正则化目标之外,还使用了另外两种技术来进一步防止过拟合1。
目录
-
- shrinkage[^1]
- Column Subsampling[^2]
shrinkage2
第一种技术是由弗里德曼提出的收缩。在树提升的每一步之后,收缩率以η因子的比例缩放新添加的权重。与随机优化中的学习率类似,收缩减少了每棵树的影响,并为未来的树留下了改进模型的空间。
在论文2中有描述:
The “shrinkage” parameter0<v⩽10<v\\leqslant10<v⩽1 controls the learning rate of the procedure. Empirically (Friedman, 1999), it was found that small values(ν⩽0.1)(\\nu\\leqslant0.1)(ν⩽0.1) lead to much better generalization error.
shrinkage参数一般设置在0<v⩽10<v\\leqslant10<v⩽1范围内,Empirically (Friedman, 1999)发现小的值(ν⩽0.1)(\\nu\\leqslant0.1)(ν⩽0.1)使得有更好的泛化性能;
Fm(x)=Fm−1(x)+v⋅γlm1(x∈Rlm).F_m(\\mathbf{x)=}F_{m-1}(\\mathbf{x})+v\\cdot\\gamma_{lm}1(\\mathbf{x}\\in R_{lm}). Fm(x)=Fm−1(x)+v⋅γlm1(x∈Rlm).
Fm(x)F_m(x)Fm(x):模型表达式,例如递归树;
γlm\\gamma_{lm}γlm:前面的模型最小损失累加,例如递归树的损失:
γlm=argminγ∑xi∈RlmΨ(yi,Fm−1(xi)+γ).\\gamma_{l m}=\\arg\\min\\limits_\\gamma\\sum_{\\mathbf{x}_i\\in R_{l m}}\\Psi(y_i,F_{m-1}(\\mathbf{x}_i)+\\gamma). γlm=argγminxi∈Rlm∑Ψ(yi,Fm−1(xi)+γ).
Ψ\\PsiΨ:损失函数,例如平方误差损失;
Column Subsampling3
第二种技术是列(特征)子采样。该技术在RandomForest[4,13]中使用,它在商业软件TreeNet 4中实现,用于梯度增强,但在现有的开源包中没有实现。根据用户反馈,使用列子采样比传统的行子采样(也支持)更能防止过拟合。列子采样的使用也加快了后面描述的并行算法的计算速度。
Breiman, L.的随机森林算法论文中的特征采样方法和实验:
最简单的具有随机特征的随机森林是通过在每个节点随机选择一小组输入变量进行分割而形成的。使用CART方法将树生长到最大尺寸,不要修剪。用Forest-RI表示这个过程。组的大小F是固定的,我们尝试了F的两个值。第一种方法只使用了一个随机选择的变量,即F = 1。第二种选择F是第一个小于log2(M+1)log_2(M + 1)log2(M+1)的整数,其中M是输入的数量。
注:实验方法是使用来自UCI存储库的13个较小的数据集,3个较大的数据集,分别分为训练集和测试集,以及4个合成数据集。选择前10组是因为在过去的研究中使用过它们。表1给出了一个简要的总结。
Breiman, L.在13个较小的数据集上,使用以下程序:随机留出10%的数据。在剩下的数据上,随机森林运行两次,生长并组合100棵树——第一次是F=1F = 1F=1,第二次是F=int(log2(M+1))F = int(log_2(M +1))F=int(log2(M+1))。然后将留出的10%进行两个随机森林模型推理,以获得两者的测试集误差。所选的测试集误差对应于两次运行中out-of-bag估计的较低值。并且重复100次,测试集误差取平均值。
在随机森林中,使用特征随机选择的方式得到的结果如下。
参考:
-
XGBoost: A Scalable Tree Boosting System ↩︎
-
Friedman, J. H. (2002). Stochastic gradient boosting. Computational Statistics & Data Analysis, 38(4), 367–378. doi:10.1016/s0167-9473(01)00065-2 ↩︎ ↩︎
-
Breiman, L. (2001). Machine Learning, 45(1), 5–32. doi:10.1023/a:1010933404324 ↩︎