快来一起挖掘幸福感!
基于XGBoost模型的幸福度预测
模型建立
XGBoost 模型介绍
XGBoost 是一个具有高效、灵活和可移植性的经过优化的分布式 梯度提升 库。它的实现是基于机器学习算法梯度提升框架。XGBoost 提供了并行的提升树(例如GBDT、GBM)以一个非常快速并且精准的方法解决了许多的数据科学问题。相同的代码可以运行在主流的分布式环境(如Hadoop、SGE、MPI)并且可以处理数十亿的样本。
XGBoost代表了极端梯度提升(Extreme Gradient Boosting)。
集成决策树
首先了解XGBoost的模型选择:集成决策树。树的集成模型是由CART(classification and regression trees)的集合组成。下面一张图简单说明了一个CART分出某个人是否喜欢玩电脑游戏的例子。
将每个家庭成员分到不同的叶子结点上,并赋给他们一个分数,每一个叶结点对应了一个分数。CART与决策树是略有不同的,决策树中每个叶结点只包含了一个决策值。在CART上,真实的分数是与叶结点关联的,可以给出比分类更丰富的解释。这也允许了更具有原则、更一致性的优化方法。
通常,在实践中一个单独的树是不够强大的。实际上使用的是集成模型,将多个树的预测结果汇总到一起。
上图中是一个由两棵树集成在一起的例子。每一个树的预测分数被加到一起得到最终的分数。一个重要的因素是两棵树努力补足彼此。可以写出模型:
y^i=∑k=1Kfk(xi),fk∈Fy^i=k=1∑Kfk(xi),fk∈F
其中,KK 是树的数量,ff 是一个在函数空间 FF 的函数,并且 FF 是一个所有可能的CART的集合。可被优化的目标函数为:
obj(θ)=∑inℓ(yi,y^i)+∑k=1KΩ(fk)obj(θ)=i∑nℓ(yi,y^i)+k=1∑KΩ(fk)
随机森林和提升树实际上都是相同的模型;不同之处是如何去训练它们。如果需要一个用来预测的集成树,只需要写出一个并其可以工作在随机森林和提升树上。
提升树
正如同所有的监督学习一样,想要训练树就要先定义目标函数并优化它。
一个目标函数要总是包含训练的损失度和正则化项。
obj=∑inℓ(yi,y^i)+∑k=1KΩ(fk)obj=i∑nℓ(yi,y^i)+k=1∑KΩ(fk)
加性训练
树需要训练的参数有 fifi 每一个都包含了树的结构和叶结点的得分。训练树的结构是比传统的可以直接采用梯度的优化问题更难。一次性训练并学习到所有的树是非常棘手的。相反地,可以采取一个附加的策略,修正已经学习到的,同时增加一课新树。可以写出在第 tt 步的预测值 KaTeX parse error: Got function '\left' with no arguments as superscript at position 10: \hat{y}_i^̲\left(t\right )
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \hat{y}_i^{\le…
在每一步需要什么的树,增加一棵树,优化目标函数。
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \mathit{obj}^{…
如果考虑使用均方误差(MSE)作为损失函数,目标函数将会变成:
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \mathit{obj}^{…
MSE的形式是非常优雅的,其中有一个一阶项(通常称作残差)和一个二阶项。对于其它的损失函数(例如logistic的损失函数)而言,是没有那么轻易就可以得到如此优雅的形式。因此,通常会使用泰勒公式损失函数展开到二阶项:
泰勒公式:函数 f(x)f(x) 在开区间 (a,b)(a,b) 上具有 (n+1)(n+1) 阶导数,对于任一 x∈(a,b)x∈(a,b) 有
f(x)=f(x0)0!+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)+⋯+f(n)(x0)n!(x−x0)+Rn(x)f(x)=0!f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+