gbdt算法

GBDT回归树过程详解

百般思念 提交于 2020-04-06 09:53:18
GBDT回归树过程详解 转载 简单点1024 最后发布于2018-04-11 22:56:46 阅读数 10281 收藏 展开 综述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。   GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类。   GBDT的思想使其具有天然优势可以发现多种有区分性的特征以及特征组合。业界中,Facebook使用其来自动发现有效的特征、特征组合,来作为LR模型中的特征,以提高 CTR预估(Click-Through Rate Prediction)的准确性(详见参考文献5、6);GBDT在淘宝的搜索及预测业务上也发挥了重要作用(详见参考文献7)。 一、Regression Decision Tree:回归树 回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化平方误差。也就是被预测出错的人数越多

简单粗暴理解与实现机器学习之集成学习(三):Boosting集成原理、实现过程、api介绍、GBDT、XGBoost、泰勒展开式

送分小仙女□ 提交于 2020-03-07 04:24:46
集成学习 文章目录 集成学习 学习目标 5.3 Boosting 1.boosting集成原理 1.1 什么是boosting 1.2 实现过程: 1.训练第一个学习器 2.调整数据分布 3.训练第二个学习器 4.再次调整数据分布 5.依次训练学习器,调整数据分布 **6.整体过程实现** 1.3 api介绍 2 GBDT(了解) 2.1 梯度的概念(复习) 2.2 GBDT执行流程 2.3 案例 2.4 GBDT主要执行思想 3.XGBoost【了解】 4 什么是泰勒展开式【拓展】 学习目标 了解集成学习中主要解决的两个核心任务 知道bagging集成原理 知道随机森林决策树的建立过程 知道为什么需要随机有放回(Bootstrap)的抽样 应用RandomForestClassifie实现随机森林算法 知道boosting集成原理 知道bagging和boosting的区别 了解gbdt实现过程 5.3 Boosting 1.boosting集成原理 1.1 什么是boosting 随着学习的积累从弱到强 简而言之:每新加入一个弱学习器,整体能力就会得到提升 代表算法:Adaboost,GBDT,XGBoost 1.2 实现过程: 1.训练第一个学习器 2.调整数据分布 3.训练第二个学习器 4.再次调整数据分布 5.依次训练学习器,调整数据分布 6.整体过程实现 关键点:

GBDT

*爱你&永不变心* 提交于 2020-02-26 19:14:55
1. 解释一下GBDT算法的过程 GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使用的是Boosting的思想。 1.1 Boosting思想 Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。 Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。 1.2 GBDT原来是这么回事 GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。当然了,它里面的弱分类器的表现形式就是各棵树。 举一个非常简单的例子,比如我今年30岁了,但计算机或者模型GBDT并不知道我今年多少岁,那GBDT咋办呢? 它会在第一个弱分类器(或第一棵树中)随便用一个年龄比如20岁来拟合,然后发现误差有10岁; 接下来在第二棵树中,用6岁去拟合剩下的损失,发现差距还有4岁; 接着在第三棵树中用3岁拟合剩下的差距,发现差距只有1岁了; 最后在第四课树中用1岁拟合剩下的残差,完美。 最终,四棵树的结论加起来,就是真实年龄30岁(实际工程中

机器学习算法之LightGBM

南楼画角 提交于 2020-02-25 13:00:33
这篇文章我们继续学习一下 GBDT 模型的另一个进化版本:LightGBM。LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。 LightGBM在很多方面会比XGBoost表现的更为优秀。它有以下优势: 更快的训练效率 低内存使用 更高的准确率 支持并行化学习 可处理大规模数据 支持直接使用category特征 从下图实验数据可以看出, LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,并且准确率也有提升。 看完这些惊人的实验结果以后,对下面两个问题产生了疑惑:XGBoost已经十分完美了,为什么还要追求速度更快、内存使用更小的模型?对GBDT算法进行改进和提升的技术细节是什么? 提出LightGBM的动机 常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。

集成学习之Boosting —— XGBoost

醉酒当歌 提交于 2020-02-03 10:31:10
集成学习之Boosting —— AdaBoost 集成学习之Boosting —— Gradient Boosting 集成学习之Boosting —— XGBoost Gradient Boosting 可以看做是一个总体的算法框架,起始于Friedman 的论文 [ Greedy Function Approximation: A Gradient Boosting Machine ] 。XGBoost (eXtreme Gradient Boosting) 是于2015年提出的一个新的 Gradient Boosting 实现,由华盛顿大学的 陈天奇 等人开发,在速度和精度上都有显著提升,因而近年来在 Kaggle 等各大数据科学比赛中都得到了广泛应用。本文主要对其原理进行阐述,并将其与传统的 GBDT 进行比较。 大体来看,XGBoost 在原理方面的改进主要就是在损失函数上作文章。一是在原损失函数的基础上添加了正则化项产生了新的目标函数,这类似于对每棵树进行了剪枝并限制了叶结点上的分数来防止过拟合。二是对目标函数进行二阶泰勒展开,以类似牛顿法的方式来进行优化(事实上早在 [ Friedman, J., Hastie, T. and Tibshirani, R., 1999 ] 中就已有类似方案,即利用二阶导信息来最小化目标函数,陈天奇在论文中也提到了这一点)。

GBDT FFM(FM) Online Learing(FTRL)

混江龙づ霸主 提交于 2020-02-02 01:56:21
GBDT+FFM(FM)+Online Learing(FTRL)是kaggle比赛的重点方法,需要重点学习。 从Ensemble说起 Bagging,Boosting和Stacking是集成学习的三种主要的形式. Bagging Bagging=Bootstrap Aggregating ,是 model averaging 的策略. bootstrap 是一种有放回的抽样,那么bagging就是使用bootstrap抽样来进行模型平均(vote). 从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果. 比如: Random Forest 就是使用bagging的思想 (1) bootstrap抽样产生样本集M (2) 从原始的K个特征中选择k(logK)个随机特征作为特征集F (3) 对样本集M在特征集F上建立决策树(CART) (4) 重复(1)-(3)产生多个决策树 (5) 投票(average) 这里借鉴别人的一张图: Stacking 是指训练一个模型用于组合其他各个模型。即首先我们先训练多个不同的模型,然后再以之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出. 将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值

推荐算法—ctr预估

妖精的绣舞 提交于 2020-01-27 07:54:16
文章目录 总览 传统CTR模型演化的关系图 深度学习CTR模型的演化图谱 算法比对与总结 LR——CTR模型的核心和基础 FM模型——因子分解和特征交叉 LR+GBDT——特征工程模型化的开端 FTRL——在线实时训练模型 LS-PLM(MLR)——阿里曾经的主流CTR模型 Deep Neural Network (DNN) ——多层感知机器模拟特征组合 Deep Crossing(2016年)——DNN中deep加了resnet FNN(2016年)——用FM的隐向量完成Embedding初始化 PNN (2016年)——丰富特征交叉的方式 Google Wide&Deep(2016年)——记忆能力和泛化能力的综合权衡 华为 DeepFM (2017年)——用FM代替Wide部分 Google Deep&Cross(2017年)——使用Cross网络代替Wide部分 NFM(2017年)——对Deep部分的改进 AFM(2017年)——引入Attention机制的FM 阿里DIN(2018年)——阿里加入Attention机制的深度学习网络 阿里DIEN(2018年)——DIN的“进化” 参考 总览 传统CTR模型演化的关系图 向下为了解决特征交叉的问题,演化出PLOY2,FM,FFM等模型; 向右为了使用模型化、自动化的手段解决之前特征工程的难题

面试——XGBoost

荒凉一梦 提交于 2020-01-25 21:52:48
文章目录 简单介绍一下XGBoost XGBoost与GBDT有什么不同 XGBoost为什么使用泰勒二阶展开 XGBoost为什么可以并行训练 XGBoost为什么快 XGBoost防止过拟合的方法 XGBoost如何处理缺失值 XGBoost中的一棵树的停止生长条件 RF和GBDT的区别 XGBoost如何处理不平衡数据 比较LR和GBDT,说说什么情景下GBDT不如LR XGBoost中如何对树进行剪枝 XGBoost如何选择最佳分裂点? XGBoost如何评价特征的重要性 XGBooost参数调优的一般步骤 XGBoost模型如果过拟合了怎么解决 为什么XGBoost相比某些模型对缺失值不敏感 XGBoost和LightGBM的区别 简单介绍一下XGBoost 首先需要说一说GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。 XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化 XGBoost与GBDT有什么不同 基分类器:XGBoost的基分类器不仅支持CART决策树,还支持线性分类器

GBDT与XGBOOST

情到浓时终转凉″ 提交于 2020-01-25 19:56:59
Boosting方法实际上是采用加法模型与前向分布算法。在上一篇提到的Adaboost算法也可以用加法模型和前向分布算法来表示。以决策树为基学习器的提升方法称为提升树(Boosting Tree)。对分类问题决策树是CART分类树,对回归问题决策树是CART回归树。 1、前向分布算法   引入加法模型      在给定了训练数据和损失函数L(y,f(x))L(y,f(x)) 的条件下,可以通过损失函数最小化来学习加法模型      然而对于这个问题是个很复杂的优化问题,而且要训练的参数非常的多,前向分布算法的提出就是为了解决模型的优化问题,其核心思想是因为加法模型是由多各模型相加在一起的,而且在Boosting中模型之间又是有先后顺序的,因此可以在执行每一步加法的时候对模型进行优化,那么每一步只需要学习一个模型和一个参数,通过这种方式来逐步逼近全局最优,每一步优化的损失函数:      具体算法流程如下:   1)初始化f0(x)=0f0(x)=0;   2)第m次迭代时,极小化损失函数      3)更新模型,则$f_m (x)$:      4)得到最终的加法模型       Adaboost算法也可以用前向分布算法来描述,在这里输入的数据集是带有权重分布的数据集,损失函数是指数损失函数。 2、GBDT算法   GBDT是梯度提升决策树(Gradient Boosting

集成算法之GBDT和xgboost

大兔子大兔子 提交于 2020-01-18 01:47:57
大家知道,我们在进行建模时,会求解一个目标函数;目标函数又称代价函数,在机器学习中普遍存在,一般形式为: o b j ( θ ) = L ( θ ) + Ω ( θ ) obj(\theta)=L(\theta)+\Omega(\theta) o b j ( θ ) = L ( θ ) + Ω ( θ ) ; 其中: L ( θ ) L(\theta) L ( θ ) 为训练误差,衡量模型在训练集上的表现; Ω ( θ ) \Omega(\theta) Ω ( θ ) 是正则化惩罚,衡量模型的复杂度。 训练集误差: L = ∑ i = 1 n l ( y i , y i ^ ) L=\sum_{i=1}^{n}l(y_i,\hat{y_i}) L = ∑ i = 1 n ​ l ( y i ​ , y i ​ ^ ​ ) square loss: l ( y i , y i ^ ) = ( y i − y i ^ ) 2 l(y_i,\hat{y_i})=(y_i-\hat{y_i})^2 l ( y i ​ , y i ​ ^ ​ ) = ( y i ​ − y i ​ ^ ​ ) 2 logistic loss: l ( y i , y i ^ ) = y i l n ( 1 + e − y i ^ ) + ( 1 − y i ) l n ( 1 + e y i ^ ) l(y