XGBOOST算法过程

自从在2014年9月xgboost在kaggle夺得魁首后,xgboost在各种竞赛场合出现频率越来越多。之后将xgboost引入到电子商务的商品推荐算法中,建立分类预测模型,具有速度快、准确率高等优势。

xgboost本质上还是GBDT,但是xgboost对loss func做了二阶的泰勒展开,并在目标函数之外加入了正则项整体求最优解,用以权衡目标函数的下降和模型的复杂程度。


监督学习的概念说明

目标函数:Obj(\theta)=L(\theta )+\Omega (\theta)

L(\theta)为training loss,用于衡量模型在数据集上的训练好坏程度。

\Omega (\theta)为Regularization,用于衡量模型的复杂程度。

training loss:L=\sum_{i=1}^{n}l(y(i),\hat y(i))

  1. square loss :l(y(i),\hat y(i))=(y(i)-\hat y(i))^2
  2. logistic loss :l(y(i),\hat y(i))=y(i)\ln(1+e^{-\hat y(i)})+(1-y(i))\ln(1+e^{\hat y(i)} )

regularization:

  1. L2 范数 :\Omega (\theta)=\lambda \parallel \theta \parallel ^2

     2. L1 范数 : \Omega (\theta)=\lambda\parallel \theta\parallel 1

Ridge Regression:

  • \sum_{i=1}^{n}(y(i)-\theta^T*x(i))^2+\lambda\parallel\theta\parallel\ ^2
  • Linear model, square loss, L2 regularization

Lasso: 

  • \sum_{i=1}^{n}(y(i)-\theta^{T} x(i))^2+\lambda\parallel\theta\parallel\1
  • Linear model, square loss, L1 regularization

 Logisit Regression:

  • \sum_{i=1}^{n}[y(i)\log_{e}(1+e^{-\theta^T*x(i)})+(1-y(i))\log_{e}(1+e^{\theta^T*x(i)})]+\lambda\parallel\theta\parallel\1
  • Linear model, logistic loss, L2 regularization

回归树和集成的学习过程

回归树(众所周知,回归树有分类和回归树。)

  • 决策规则跟决策树的一样。
  • 在每个叶子上都包含一个score值

XGBOOST算法过程_第1张图片

通过输入年龄、性别、职业等等来进行树的学习,看看每个人喜欢电脑游戏的程度。每个叶子节点上都有一个预测score。

XGBOOST算法过程_第2张图片

从上图可看到学习了两棵树,而对于每个样本来说,最后预测的score是每棵树上的叶子节点的score的和。

树集成方法

树集成的方法用的非常广泛,比如GBM,Random Forest ......

  • 几乎一半的数据挖掘竞争都是通过使用树集成方法的变体

 特征的缩放是恒定的,所以不需要仔细地去做特征规则化。

学习特征之间的高阶交互。

可扩展性好,可以用到工业智造中。

模型和参数

模型:

       假设我们有K颗数,则有:

       \hat{y(i)}=\sum_{k=1}^{k}{f_{k}}(x(i)) ,     f_{k}(x(i)) \in F   (F为包含所有回归树的函数空间)

我们可以将回归树看成是一个将属性映射到score的函数。

那么我们应该怎样学习这个函数呢?

  • 定义目标函数(包含损失函数和正则项)然后优化它。

目标函数:

                 Obj=\sum_{i=1}^{n}l(y(i),\hat y(i))+\sum_{k=1}^{k}\Omega(f_{k})

目标函数的第一部分为training loss,第二部分为树的复杂度。

那么定义\Omega的方法有哪些呢?

  • 树中的节点数、深度
  • 叶子权重的L2范数
  • ......

 当我们谈论决策树的时候我们可能会探索到很多

  • 通过信息增益来划分
  • 树的剪枝
  • 树的最大深度
  • 叶子节点的值更加平滑

其实很多的探索都会很好的映射到目标函数上

  • 信息增益\rightarrow training loss
  • 树的剪枝\rightarrowregularization defined by #nodes
  • 最大深度\rightarrowconstraint on the function space
  • 叶子值平滑度\rightarrowL2 regularization on leaf weights

 当我们谈论决策树的时候我们可能会探索到很多

  • 通过信息增益来划分
  • 树的剪枝
  • 树的最大深度
  • 叶子节点的值更加平滑

其实很多的探索都会很好的映射到目标函数上

梯度提升

上面的内容告诉我们我们要学习什么,但是这部分告诉我们我们应该怎样去做

 Obj=\sum_{i=1}^{n}l(y(i),\hat y(i))+\sum_{k=1}^{k}\Omega(f_{k})       ,f_{k}\in F

Additive Training (Boosting)

首先,从常数来进行预测,每次都添加一个新的函数

\hat{y}_{i}^{0}=0

\hat{y}_{i}^{1}=f_{1}(x(i))=\hat{y}_{i}^{0}+f_{1}(x(i))

\hat{y}_{i}^2=f_{1}(x(i))+f_{2}(x(i))=\hat{y}_{i}^{1}+f_{2}(x(i))

...

\hat{y}_{i}^t=\sum_{k=1}^{t}f_{k}(x(i))=\hat{y}_{i}^{t-1}+f_{t}(x(i))

那么目标函数为

Obj^{t}=\sum_{i=1}^{n}l(y_{i},\hat y_{i}^{t})+\sum_{i=1}^{t}\Omega(f_{i})

         =\sum_{i=1}^{n}l(y_{i},\hat y_{i}^{t-1}+f_{t}(x(i)))+\Omega(f_{t})+constant

 我们的目的是从上面的目标函数中找到f_{t},使其最小化。

下面我们对目标函数思考用square loss ,则目标函数为

Obj^{t}=\sum_{i=1}^{n}(y_{i}-(\hat y_{i}^{t-1}+f_{t}(x(i))))^2+\Omega(f_{t})+constant

         =\sum_{i=1}^{n}[2(\hat{y}_{i}^{t-1}-y_{i})f_{t}(x(i))+f_{t}(x(i))^2] +\Omega(f_{t})+constant

可以看到目标函数似乎还是挺复杂的,那么接下来就对目标函数进行泰勒展开。

           

 Obj^{t}\simeq\sum_{i=1}^{n}[l(y_{i},\hat{y}_{i}^{t-1})+g_{i}f_{t}(x(i))+\frac{1}{2}h_{i}f_{t}^{2}(x(i))]+\Omega (f_{t})+constant

也可以用square loss来对g_{i},h_{i}化简,可得到目标函数

              \sum_{i=1}^{n}[g_{i}f_{t}(x(i))+\frac{1}{2}h_{i}f_{t}^2(x(i))]+\Omega(f_{t})    

             

上面我们得到的是目标函数,那么第二部分说的就是怎样去优化树。

你可能感兴趣的:(人工智能,机器学习)