gbdt算法,gbdt算法是什么

  gbdt算法,gbdt算法是什么

  它是通过阅读大量有关GBDT建筑特色的资料而编制的。具体信息见参考文献。

  目录1。背景1.1梯度推进1.2梯度推进决策树1.3 GBDT应用-回归和分类23。GBDT建设新特色的思路3。GBDT和LR 4的融合方案。源内容生成GBDT功能:为FFM 5生成功能。Python实现摘要参考

  1.背景1.1梯度增强

  梯度增强是一种增强方法。其主要思想是每次建立模型时,模型的损失函数的梯度下降方向都是之前建立的。损失函数是评价模型的性能(一般是拟合度的正则项),认为损失函数越小,性能越好。如果损失函数继续下降,可以不断修改模型以提高其性能。最好的办法是让损失函数沿着梯度方向递减(递减最快的是在合理的梯度方向)。

  梯度增强是一个框架,其中可以嵌入许多不同的算法。

  1.2梯度推进决策树每建立一个树模型,都是之前建立的模型的损失函数的梯度下降方向。也就是说,当前模型中损失函数的负梯度的值被用作回归问题的提升树算法的残差近似值,以拟合回归树。

  具体算法:GBDT原理——梯度推进决策树

  1.3 GBDT应用——回归与分类GBDT分类:每棵树拟合当前整个模型的损失函数的负梯度,构造一棵新的树加入到当前模型中形成新的模型,下一棵树拟合新模型的损失函数的负梯度。下面是它在Python的sklearn包下的简单调用方法。

  从sklearn导入ensembleclf=ensemble。GradientBoostingClassifier()gbdt _ model=clf . fit(X _ train,Y _ train)# training model prediction _ X=gbdt _ model . predict _ proba(test 1217 _ X)[:1] # predict:概率1 #包含参数# loss=loss,learning_rate=learning_rate,n_estimators=n_estimators,# min _ samples _ split=min _ samples _ split,# min _ samples _ leaf=min _ samples _ leaf,# min _ weight _ fraction _ leaf=min _ weight _ fraction # max _ leaf _ nodes=max _ leaf _ nodes,warm _ start=warm _ start,# presort=presort GBDT回归:每棵树拟合当前整个模型的残差,建立一棵新的树并添加到当前模型中形成新的模型,如下

  from sk learn import ensemble clf=ensemble . gradientbootingressor()gbdt _ model=clf . fit(x _ train,y _ train)# training modely _ upper=gbdt _ model . predict(x _ test)# predict #包含的参数同上。GBDT调音问题:sklearn中的GBDT调音

  GBDT使用的正则化技术避免了模型过于复杂。参考GBDT在本文中使用的正则化技术。

  2.GBDT构建新功能。这些特征决定了模型性能的上限。比如深度学习的方法也是如何更好的把数据表达成特征。如果数据可以表示为线性可分的数据,简单的线性模型就可以达到很好的效果。GBDT构建新的要素以使要素更好地表达数据。

  主要参考脸书[1]原文,大意是:

  在脸书广告点击量的预测中,采用了决策树和logistic回归相结合的模型,优于其他方法,达到了3%以上。

  主旨:

GBDT每棵树的路径直接作为LR输入特征使用。

  现有特征用于训练GBDT模型,然后通过使用由GBDT模型学习的树来构造新特征。最后,将这些新特征添加到原始特征中来训练模型。构造的新特征向量为0/1,向量的每个元素对应于GBDT模型中树的

叶子结点

。当一个样本点穿过一棵树,最后落在树的一个叶节点上时,这个叶节点对应的元素值在新的特征向量中为1,而树的其他叶节点对应的元素值为0。新特征向量的长度等于GBDT模型中所有树的叶节点的总和。

  上图是混合模型结构。通过增强的决策树来转换特征。每个个体树的输出被视为稀疏线性分类器的分类输入特征。增强的决策树被证明是一种非常强大的特征变换。

  例子:上图有两棵树,后面的鼠标有三个叶节点,右边的树有两个叶节点。最后一个特征是一个五维向量。对于输入的X,假设他落在后面鼠标的第一个节点,编码[1,0,0],在右边树的第二个节点,编码[0,1],那么整个编码就是[1,0,0,0,1]。作为一个特征,这种编码被输入到线性分类模型(LR或FM)中进行分类。

  在文中GBDT的参数中,树的最大数量是500(500以上,没有提升),每棵树的节点不超过12个。

  3.GBDT和LR融合方案在CTR估计中,如何利用AD ID是一个问题。

  直接用AD ID做特性不太可行,onehot代码太稀疏。为每个广告ID构建GBDT树相当于发现区分每个广告的特征。而曝光不足的样本,也就是长尾部分,是无法单独构建的。

  综合方案是用GBDT分别为非ID和ID建立一种树。

  非类别树ID:

  不是用细粒度的id构建树,而是用这样的树作为基础,也就是说,这些id一起构建GBDT。即使是曝光度较低的广告和广告主,仍然可以通过这样的树获得鲜明的特征和特征组合。

  类别树:

  一种树是用细粒度的ID构建的(为每个ID构建GBDT),用于查找完全暴露的ID对应的区别性特征和特征组合。如何根据GBDT建立的两类树来映射原始特征?以下面的图3为例。当一个样本X进来时,它遍历两类树到叶子节点,得到的特征作为LR的输入。当广告曝光不足以训练树的时候,其他树只是补充。

  如图所示:

  kaggle竞赛中一般树的最大数量是30,GBDT转换得到的特征空间比原来的ID低很多。

  4.具体源代码内容:由kaggle-2014-criteo实现的GitHub源代码:https://github.com/guestwalk/kaggle-2014-criteo

  生成GBDT要素:使用GBDT生成要素。使用深度为7的30棵树。总共生成30个特征。基于以下算法:http://statweb.stanford.edu/~jhf/ftp/trebst.pdf示例2:下图假设训练了三个深度为2的树模型。对于输入X,第一棵树属于节点4,第二棵树属于节点7,第三棵树属于节点6,因此生成的特征是“1:4 2:7 3:6”

  为FFM数值特征生成特征:transform:vl o g(v)2v left arrow l floor log(v)2 r floor vlog(v)2

  类别:小于10的类转换为一个特殊值,即合并为一个。

  直接使用GBDT功能。

  使用哈希技巧将三种特征映射到1M维.

  FFM细节

  5.Python实现上面的源代码是多线程实现的。Python的sklearn库提供了这个方法。以下简单的做法:

  首先,要明确使用libFFM还是logistic回归,两者的区别在于:

  

libFFM适用于例子2的情况,即只用使用每棵树的index。

  

逻辑回归适用于例子1的情况,须将节点使用one-hot编码

,核心代码如下:关键方法是树模型(GBDT)的apply()方法。

  #弱分类器数量n_estimator=10#随机生成分类数据。x,y=make _ classification(n _ samples=80000)#切割成测试集和训练集,比例为0.5x _ train,x _ test,y _ train,y _ test=train _ test _ split (x,y,test _ size=0.5) #切割训练集。这分为两部分,以防止过度配合。X _ train,x _ train _ lr,y _ train,y _ train _ lr=train _ test _ split(x _ train,y _ train,test _ size=0.5) #调用GBDT分类模型。grd=gradientbootingclassifier(n _ estimators=n _ estimator)#调用一键编码。Gr _ enc=onehotencoder () #调用LR分类模型。grd _ lm=LogisticRegression() GBDT模型用X_train训练,然后特征 grd.fit (X _ train,Y _ train) # fitone-hot编码器grd _ enc . fit(grd . apply(X _ train)[: grd _ lm . fit(grd _ enc . transform(grd . apply(X _ train _ lr)[:0]),Y_train_lr)#使用训练好的LR模型多次x _ test进行预测Y _ pred _ grd _ lm=grd _ lm . predict _ proba(grd _ enc . transform(grd . apply(X _ test)[:0][:1] Tpr _ grd _ lm,_=roc _ curve (y _ test,Y _ pred _ grr

  官方示例介绍:http://sikkit-learn.org/stable/auto _示例/系综/plot _ feature _ transformation.html #示例-系综-plot-feature-transformation-py

  对于汇总大样本量的数据,线性模型具有训练速度快的特点,但线性模型的学习能力仅限于线性可分数据,因此需要特征工程将数据尽可能地从输入空间转换到线性可分特征空间。GBDT和LR的融合模型实际上是利用GBDT来发现区别特征和组合特征,而不是人工的组合特征。工业GBDT LR和GBDT FM被广泛使用。

  Csdn原件:http://blog.csdn.net/shine19930820/article/details/71713680

  参考何等人2014年在预测广告点击量的实践经验。

  GBDT原理-梯度推进决策树

  梯度推进决策树学习

  腾讯大数据:GBDT和LR在CTR预测上的融合方案

gbdt算法,gbdt算法是什么