gbdt算法

lightgbm,xgboost,gbdt的区别与联系

一个人想着一个人 提交于 2019-12-05 22:11:47
转载链接 https://www.cnblogs.com/mata123/p/7440774.html GBDT 梯度提升树实在提升树的基础上发展而来的一种使用范围更广的方法,当处理回归问题时,提升树可以看作是梯度提升树的特例(分类问题时是不是特例?)。 因为提升树在构建树每一步的过程中都是去拟合上一步获得模型在训练集上的残差。后面我们将会介绍,这个残存正好是损失函数的梯度,对应于GBDT每一步要拟合的对象。 主要思想 在目标函数所在的函数空间中做梯度下降,即把待求的函数模型当作参数,每一步要拟合目标函数关于上一步获得的模型的梯度,从而使得参数朝着最小化目标函数的方向更新。 一些特性 每次迭代获得的决策树模型都要乘以一个缩减系数,从而降低每棵树的作用,提升可学习空间。 每次迭代拟合的是一阶梯度。 XGBoost XGBoost 是GBDT的一个变种,最大的区别是xgboost通过对目标函数做二阶泰勒展开,从而求出下一步要拟合的树的叶子节点权重(需要先确定树的结构),从而根据损失函数求出每一次分裂节点的损失减小的大小,从而根据分裂损失选择合适的属性进行分裂。 这个利用二阶展开的到的损失函数公式与分裂节点的过程是息息相关的。先遍历所有节点的所有属性进行分裂,假设选择了这个a属性的一个取值作为分裂节点,根据泰勒展开求得的公式可计算该树结构各个叶子节点的权重,从而计算损失减小的程度

《集成学习》

喜你入骨 提交于 2019-12-05 18:07:08
介绍 Stacking 、 Bagging 和 Boosting 三种方式。 一、 Stacking 思想:由原始的训练集训练出若干个单模型,将单模型的输出结果作为样本特征进行整合,并把原始样本标记作为新数据样本标记,生成新的训练集。再根据训练集训练一个新模型,并对样本进行预测。 注意:模型训练时,如果直接使用一级模型对初始的训练样本进行预测来产生二级训练集,会产生较大的过拟合风险。因而,常采用 " 交叉验证法 " 或 " 留一法 " 来由一级模型未使用的样本产生二级模型的训练集。将样本划分为 K 份,选择 K-1 份作为 " 训练集 " ,剩余的一份作为 " 测试集 ", 因而总共有 K 种组合方式。每次使用一种方式来训练 T 个模型(模型可以是 " 异质的 " ,也可以是 " 同质的 " ),利用测试集产生一份训练数据作为样本特征,对应的原始测试集数据的样本标记被作为新数据样本标记来使用。最后,将由一级模型产生的 K 次结果组合到一起,作为二级模型的输入进行训练模型。 二、 Bagging 思想:对训练集进行有放回的抽样得到子训练集,比较著名的是 0.632 自助法。每个基学习器基于不同的子训练集进行训练,然后综合所有基学习器的预测值得到最终的预测结果。常采用 " 投票法 " ,即将票数最多的类别作为预测类别。 三、 Boosting 思想:模型的训练是按照顺序的

集成学习

徘徊边缘 提交于 2019-12-04 15:17:45
集成学习 集成学习通过构建并结合多个学习器来完成学习任务。 集成学习的思路是通过合并多个模型来提升机器学习性能,这种方法相较于当个单个模型通常能够获得更好的预测结果。这也是集成学习在众多高水平的比赛如奈飞比赛,KDD和Kaggle,被首先推荐使用的原因。 分类 用于减少方差的bagging 用于减少偏差的boosting 用于提升预测结果的stacking 集成学习方法也可以归为如下两大类: 1 串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。 2 并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。 Bagging和Boosting的区别? 样本选择: Bagging: 训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。 Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。 样例权重: Bagging: 使用均匀取样,每个样例的权重相等。 Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。 预测函数: Bagging: 所有预测函数的权重相等。 Boosting

个性化排序算法实践(四)——GBDT+LR

[亡魂溺海] 提交于 2019-12-03 09:53:13
本质上GBDT+LR是一种具有 stacking 思想的二分类器模型,所以可以用来解决二分类问题。这个方法出自于Facebook 2014年的论文 Practical Lessons from Predicting Clicks on Ads at Facebook 。 GBDT+LR 使用最广泛的场景是CTR点击率预估,即预测当给用户推送的广告会不会被用户点击。 点击率预估模型涉及的训练样本一般是上亿级别,样本量大,模型常采用速度较快的LR。但LR是线性模型,学习能力有限,此时特征工程尤其重要。现有的特征工程实验,主要集中在寻找到有区分度的特征、特征组合,折腾一圈未必会带来效果提升。GBDT算法的特点正好可以用来发掘有区分度的特征、特征组合,减少特征工程中人力成本。 思想 GBDT+LR 由两部分组成,其中GBDT用来对训练集提取特征作为新的训练输入数据,LR作为新训练输入数据的分类器。 GBDT首先对原始训练数据做训练,得到一个二分类器,当然这里也需要利用网格搜索寻找最佳参数组合。 与通常做法不同的是,当GBDT训练好做预测的时候,输出的并不是最终的二分类概率值,而是要把模型中的每棵树计算得到的预测概率值所属的叶子结点位置记为1,这样,就构造出了新的训练数据。 设GBDT有两个弱分类器,分别以蓝色和红色部分表示,其中蓝色弱分类器叶子结点个数为3,红色弱分类器叶子结点个数为2

GBDT

匿名 (未验证) 提交于 2019-12-02 23:57:01
1、GBDT模型介绍; 2、GBDT回归算法 3、GBDT分类算法 4、GBDT的损失函数 5、正则化 6、GBDT的梯度提升与梯度下降法的梯度下降的关系; 7、GBDT的优缺点 1、GBDT模型介绍; GBDT(Gradient Boosting Decision Tree) 又名:MART(Multiple Additive Regression Tree) 适用于分类和回归问题; 加法模型(基分类器的线性组合) 根据当前损失函数的负梯度信息来训练新加入的弱分类器,再将训练好的弱分类器以累加的形式结合到现有模型; 以决策树为基学习器的提升方法;一般会选择为CART(无论用于分类还是回归),也可以选择其他弱分类器的,选择的前提是低方差和高偏差,每次走一小步逐渐逼近结果的效果; 在训练过程中希望损失函数能够不断的减小,且尽可能快的减小。所以用的不是单纯的残差,而是损失函数的负梯度方向,这样保证每轮损失函数都在稳定下降,而且递减速度最快,类似于梯度下降法,来求损失函数的极小值; Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。 2、GBDT回归算法描述 步骤: 1、初始化

决策树

匿名 (未验证) 提交于 2019-12-02 23:42:01
一、随机森林RF与GBDT的区别 二者的共同点 ・ 都是由多棵树组成; ・ 最终的结果都由多棵树共同决定; ・ 生成样本集的时候都使用了boostrap; 二者的不同点 ・ 组成RF的可以是分类树也可以是回归树,但组成GBDT的只能是回归树; ・ RF可以并行,GBDT只能串行; ・ 对于输出结果,RF使用多数表决或简单平均,GBDT使用结果累加或加权平均RF对异常值不敏感,GBDT对异常值敏感(一个注重方差一个注重偏差) 方差和偏差的平衡技术 ・ RF注重减小模型方差来提高性能,GBDT通过减小模型偏差来提高性能RF不需要数据预处理,GBDT需要进行特征归一化(由于权重的问题)(待复查) 二、GBDT vs XGBOOST 二者的共同点 ・ XGBOOST作为GBDT应用层面的算法,基本构建在GB的思想上,在此就不讨论共同点了(太多了) ・ 但我们要知道一点:GBDT系算法在到XGBOOST为止,在生成决策树的时候是要求先对特征进行排序,再选出最显著的特征作为叶子结点进行分类的,这种特征选择方法为精确遍历,这一点在lightGRM上得到了改进。 二者的不同点(XGBOOST的改进) ・ 在优化上,GBDT只用了一阶泰勒展开,XGBOOST用了二阶泰勒展开・ ・ XGBOOST在损失函数中加入了正则项来控制过拟合:内含叶子结点个数、L2范式来代替剪枝 ・

机器学习:集成学习

限于喜欢 提交于 2019-12-02 05:29:58
集成学习 基本概念 集成学习(Ensemble Learning)的 思想 是将若干个学习器(分类|回归)组合之后产生一个新的学习器, 如何产生“好而不同”的个体学习器,是集成学习研究的核心 ; 一般性用于集成的学习器都为 弱学习器 ,即学习器的预测精度不需要太高但是应该好于随机预测的结果; 集成学习 算法的成功 在于保证了弱分类器的多样性(Diversity),即学习器之间具有 差异性 弱分类器间存在一定的差异性,会导致分类的边界不同,即会存在错误;但当多个弱分类器合并后,就可以得到更加合理的边界,能减少错误率,实现更好的效果; 对于数据集过大/过小,可以进行划分/有放回抽样的操作产生不同的数据子集,然后使用数据子集训练不同的学习器,最后合并成一个大的学习器 若数据划分边界过于复杂,使用线性模式很难描述,可以训练多个模型,后将模型进行合并; 对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个学习器模型,然后将多个模型融合 常见的集成算法有: Bagging Boosting Stacking 按照集成方式划分: 串行集成方法:通过串行的方法生成基础模型(如AdaBoost);串行集成的 基本动机 是利用基础模型之间的依赖,给被错分的样本一个较大的权重来提升性能; 并行集成方法:并行的生成基础模型(若Random Forest);并行集成的 基本动机

集成学习(四):GBDT

怎甘沉沦 提交于 2019-12-01 15:41:40
GBDT算法: 所谓的GBDT(Gradient Boost Desicison Tree)就是值在每一步迭代时我们难以真正求得一个新的模型使得其加上原有模型得到的损失最小,但是我们可以用所谓的梯度下降法使得损失减小。 输入: 训练数据集$D+\lbrace(x_{1},y_{1}),...,(x_{N},y_{N})\rbrace$,$x_{i}\in\mathbb{R}^{P}$,$y_{i}\in\mathbb{R}$; 损失函数$l(f(x),y)$; 正整数$M$; 输出: 某回归模型 Step1. 令$f_{0}=argmin_{c}\sum_{i=1}^{N}l(y_{i},c)$ Step2. $m=1,...,M$, 执行: 1) 计算$g_{m,i}=\partial_{1} l(f_{m-1}(x_{i}),y_{i})$; 2) 对数据$\lbrace(x_{1},-g_{m,1}),...,(x_{N}-g_{m,N})\rbrace$ 用CART算法进行拟合,得到一回归树,并且对每个叶节点得到一个叶节点区域$R_{mj},$ $j=1,...,J$; 3) 计算: \begin{equation}c_{mj}=argmin_{c}\sum_{x_{i}\in R_{mj}}l(f_{m-1}(x_{i})+c)\end{equation} 4) 令:

集成学习个人学习总结

[亡魂溺海] 提交于 2019-12-01 05:49:18
说明 :本科普也是借助诸多集成学习文章学习总结而来。 集成学习 一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。 集成学习之boosting Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器。1. 根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器。2. 如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。 Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。 AdaBoost算法原理 Boosting需要解决如下几个问题:

GBDT 算法

陌路散爱 提交于 2019-11-30 18:54:08
GBDT (Gradient Boosting Decision Tree) 梯度提升迭代决策树。GBDT 也是 Boosting 算法的一种,但是和 AdaBoost 算法不同(AdaBoost 算法上一篇文章已经介绍);区别如下:AdaBoost 算法是利用前一轮的弱学习器的误差来更新样本权重值,然后一轮一轮的迭代;GBDT 也是迭代,但是 GBDT 要求弱学习器必须是 CART 模型,而且 GBDT 在模型训练的时候,是要求模型预测的样本损失尽可能的小。 GBDT 直观理解:每一轮预测和实际值有残差,下一轮根据残差再进行预测,最后将所有预测相加,就是结果。 GBDT 模型可以表示为决策树的加法模型: 其中,T(x;θm)表示决策树;θm 为决策树的参数; M为树的个数。 采用前向分布算法, 首先确定初始提升树 fo(x) = 0, 第 m 步的模型是: 通过经验风险极小化确定下一棵树的参数:(其实就是让残差尽可能的小找到最优划分点) 这里的 L() 是损失函数,回归算法选择的损失函数一般是均方差(最小二乘)或者绝对值误差;而在分类算法中一般的损失函数选择对数函数来表示 GBDT 既可以做回归也可以做分类,下面先描述一下做回归的算法流程: 已知一个训练数据集 T = {(x1,y1),(x2,y2),...,(xn,yn)}, 如果将训练集分为不同的区域 R1,R2,...