该系列将整理机器学习相关知识。这篇博客主要讨论:
1 XGBoost的算法原理
2 XGboost参数调优
XGBoost是Extreme Gradient Boosting的简称,Gradient Boosting是论文"Greedy Function Approximation: A Gradient Boosting Machine"中介绍的梯度提升算法。Boosting Tree树数据挖掘和机器学习中常用算法之一,其对输入要求不敏感,效果好,在工业界用的较多(kaggle比赛必用)。
1 背景知识
1.1 Traing loss + Regularization
XGBoost用于监督学习问题(分类和回归)。监督学习的常用目标函数是:
通常目标函数包含两部分:训练误差和正则化
o b j ( θ ) = L ( θ ) + Ω ( θ ) obj(θ)=L(θ)+Ω(θ) obj(θ)=L(θ)+Ω(θ)
其中L是损失函数,度量模型预测与真实值的误差。常用的损失函数:
预测问题的平方损失函数:
L ( θ ) = ∑ i ( y i − y i ^ ) 2 L(\theta) = \sum_{i}{(y_i-\hat{y_i})}^2 L(θ)=i∑(yi−yi^)2
logistic 损失:
L ( θ ) = ∑ i [ y i l n ( 1 + e − y i ^ ) + ( 1 − y i ) l n ( 1 + e y i ^ ) ] L(\theta) = \sum_{i}[y_i ln(1+e^{-\hat{y_i}}) +(1-y_i) ln(1+e^{\hat{y_i}})] L(θ)=i∑[yiln(1+e−yi^)+(1−yi)ln(1+eyi^)]
Ω Ω Ω是正则化项,度量模型的复杂度,避免过拟合,常用的正则化有L1 和L2正则化。
1.2 Tree模型融合(集成)
Boosting Tree 最基本的部分是回归树(GBDT中用到的也是回归树,而不是分类树),也即是CART(如下图),CART会把输入根据属性分配到各个叶子节点上,而每个叶子节点上面会对应一个分数值。下面的例子是预测一个人是否喜欢电脑游戏。将叶子节点表示为分数之后,可以做很多事情,比如概率预测,排序等等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TL0FhQqH-1576119372588)(http://7xnzwk.com1.z0.glb.clouddn.com/15149016431943.jpg)]
一个CART往往过于简单,而无法有效的进行预测,因此更加高效的是使用多个CART进行融合,使用集成的方法提升预测效率:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PtUiqY4M-1576119372590)(http://7xnzwk.com1.z0.glb.clouddn.com/15147876733214.jpg)]
假设有两颗回归树,则两棵树融合后的预测结果如上图。用公式表示为:
y i ^ = ∑ k = 1 K f k ( x i ) , f k ∈ F \hat{y_i}=\sum_{k=1}^{K}f_k(x_i),f_k\in\mathscr{F} yi^=k=1∑Kfk(xi),fk∈F
其中, K是树的个数, f k ( x i ) f_k(x_i) fk(xi)是第k棵树对于输入 x i x_i xi 输出的得分, $f_k $是相应函数, F \mathscr{F} F 是相应函数空间。则目标函数为:
o b j ( θ ) = ∑ i n L ( y i , y i ^ ) + ∑ k = 1 K Ω ( f k ) obj(\theta)=\sum_i^n L(y_i,\hat{y_i})+\sum_{k=1}^K\Omega(f_k) obj(θ)=i∑nL(yi,yi^)+k=1∑KΩ(fk)
函数 L L L描述 y i y_i yi , y i ^ \hat{y_i} yi^之间的距离。
常用的模型融合方法是Random Foreast和Boosting Tree,这两种方法构造树的方式不同(参考系列前面的集成学习一节)。Tree Ensemble中,模型的参数是什么呢?其实就是指树的结构和叶子节点上面分数的预测。如何求参数?定义目标函数,通过优化目标函数进行求解。
1.3 Tree Boosting
假设每次迭代生成一棵树,则训练目标函数可以写成:
o b j ( θ ) t = ∑ i n l ( y i , y i ^ ( t ) ) + ∑ k = 1 t Ω ( f k ) obj(\theta)^{t}=\sum_i^n l(y_i,\hat{y_i}^{(t)})+ \sum_{k=1}^t\Omega(f_k) obj(θ)t=i∑nl(yi,yi^(t))+k=1∑tΩ(fk)
其中第一部分是训练误差,第2部分是每棵树的复杂度。 y i ^ ( t ) \hat{y_i}^{(t)} yi^(t)为第t步迭代的预测值,且有以下迭代关系:
y i ^ ( 0 ) = 0 \hat{y_i}^{(0)}=0 yi^(0)=0
y i ^ ( 1 ) = f 1 ( x i ) = y i ^ ( 0 ) + f 1 ( x i ) \hat{y_i}^{(1)}=f_1(x_i) = \hat{y_i}^{(0)}+f_1(x_i) yi^(1)=f1

最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



