gbdt

xgboost学习与总结

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-20 17:24:09
最近在研究xgboost,把一些xgboost的知识总结一下。这里只是把相关资源作总结,原创的东西不多。 原理 xgboost的原理首先看xgboost的作者陈天奇的 ppt 英文不太好的同学可以看看这篇博客 xgboost原理 。假如看了陈天奇的ppt还晕乎的同学,看了这篇应该能大概知道xgboost是如何求最优解的。 实战 xgboost的参数多的简直不像话。上面提到的博客里 xgboost原理 提供了3篇介绍调参思路的博客。其中作者推荐的老外的那篇有个翻译好的中文博客 XGBoost参数调优完全指南(附Python代码) 。我在这里强烈推荐。附上python的 api 地址。 常见问题 机器学习算法中GBDT和XGBOOST的区别有哪些? 这个问题的答案来自知乎 机器学习算法中GBDT和XGBOOST的区别有哪些 的wepon的回答。 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。 xgboost在代价函数里加入了正则项,用于控制模型的复杂度

xgboost原理及应用--转

坚强是说给别人听的谎言 提交于 2019-12-17 04:24:47
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT 地址 和xgboost导读和实战 地址 ,希望对xgboost原理进行深入理解。 2.xgboost vs gbdt 说到xgboost,不得不说gbdt。了解gbdt可以看我这篇文章 地址 ,gbdt无论在理论推导还是在应用场景实践都是相当完美的,但有一个问题:第n颗树训练时,需要用到第n-1颗树的(近似)残差。从这个角度来看,gbdt比较难以实现分布式(ps:虽然难,依然是可以的,换个角度思考就行),而xgboost从下面这个角度着手 注:红色箭头指向的l即为损失函数;红色方框为正则项,包括L1、L2;红色圆圈为常数项。 利用泰勒展开三项,做一个近似,我们可以很清晰地看到,最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。 3.原理 (1)定义树的复杂度 对于f的定义做一下细化,把树拆分成 结构部分q 和 叶子权重部分w 。下图是一个具体的例子。结构函数q把输入映射到叶子的索引号上面去,而w给定了每个索引号对应的叶子分数是什么。 定义这个复杂度包含了一棵树里面节点的个数,以及每个树叶子节点上面输出分数的L2模平方。当然这不是唯一的一种定义方式,不过这一定义方式学习出的树效果一般都比较不错。下图还给出了复杂度计算的一个例子。 注

ADAboost 和GBDT和XGboost

拥有回忆 提交于 2019-12-16 01:54:16
(一)Adaboost算法的模型是一个弱学习器线性组合,特点是通过迭代,每一轮学习一个弱学习器,在每次迭代中,提高那些被前一轮分类器错误分类的数据的权值,降低正确分类的数据的权值。最后,将弱分类器的线性组合作为强分类器,给分类误差小的基本分类器大的权值。每一次迭代都可以减少在训练集上的分类误差率。 当然,就如每一个算法都有自己的优缺点一样,AdaBoost 也有自身的缺点。AdaBoost 算法只直接支持二分类,遇到多分类的情况,需要借助 one-versus-rest 的思想来训练多分类模型。关于 one-verus-rest 的细节可以参考本系列第一篇文章 SVM。 AdaBoost能够有效的降低偏差,能够在泛化性能非常弱的学习器上构建成很强的集成。缺点是对噪声敏感。 AdaBoost 的核心就是不断迭代训练弱分类器,并计算弱分类器的权重。需要注意的是,弱分类器的训练依赖于样本权重。每一轮迭代的样本权重都不相同,依赖于弱分类器的权重值和上一轮迭代的样本权重。( 相当于改变了数据的分布情况 ,分类器学习和改变数据分布) 用 AdaBoost 也可以实现回归模型,需要将弱分类器替换成回归树,并将平方误差作为损失函数 GBDT与Adaboost的主要差别为,Adaboost每轮学习的一个基本学习器是通过改变样本的权值,关注上轮分类错误的样本的权值,以逐步减少在训练集上的分类误差率

通过Python做葡萄酒成分与质量的关系分析并可视化--GBDT/随机森林特征选取

心不动则不痛 提交于 2019-12-15 19:01:32
葡萄酒成分与质量关系分析 -- 通过GBDT以及Random Forests进行特征选取 在UCI下载葡萄酒数据集,链接: https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/ 红酒有1599个样本,白葡萄酒有4898个样本,本文使用红酒的数据集,文件名为winequality-red.csv 数据预处理 先把需要使用的包给导入 import pandas as pd import numpy as np from sklearn . ensemble import GradientBoostingClassifier , RandomForestClassifier from sklearn . model_selection import train_test_split , cross_val_score from sklearn . preprocessing import StandardScaler import matplotlib . pyplot as plt 根据数据集和GBDT以及随机森林算法的特性,本文不做离群值探测,直接使用原始数据。把所有特征归为X,质量归为y,把数据八二分为训练集和测试集,再做一个标准化处理。 data = pd . read_csv (

CTR预估-GBDT与LR实现

天大地大妈咪最大 提交于 2019-12-09 20:05:03
1.来源   本质上 GBDT+LR 是一种具有 stacking 思想的二分类器模型,所以可以用来解决二分类问题。这个方法出自于 Facebook 2014 年的论文 Practical Lessons from Predicting Clicks on Ads at Facebook 。 2.使用场景   GBDT+LR 使用最广泛的场景是 CTR 点击率预估,即预测当给用户推送的广告会不会被用户点击。点击率预估模型涉及的训练样本一般是上亿级别,样本量大,模型常采用速度较快的 LR。但 LR 是线性模型,学习能力有限,此时特征工程尤其重要。现有的特征工程实验,主要集中在寻找到有区分度的特征、特征组合,折腾一圈未必会带来效果提升。GBDT 算法的特点正好可以用来发掘有区分度的特征、特征组合,减少特征工程中人力成本。 3.CTR的流程   主要包括两大部分:离线部分、在线部分,其中离线部分目标主要是训练出可用模型,而在线部分则考虑模型上线后,性能可能随时间而出现下降,若出现这种情况,可选择使用 Online-Learning 来在线更新模型: 3.1离线部分 数据收集:主要收集和业务相关的数据,通常会有专门的同事在 app 位置进行埋点,拿到业务数据 预处理:对埋点拿到的业务数据进行去脏去重; 构造数据集:经过预处理的业务数据,构造数据集,在切分训练、测试

回归预测算法比较

*爱你&永不变心* 提交于 2019-12-07 21:57:37
GBDT和时间序列分析的区别:GBDT算法做预测分析时考虑到一些影响目标值的因素,而时间序列主要考虑到数据在时序上的一些规律,忽略了其他因素对目标值的影响。这两种算法在实际应用中刚好互补。如果原始数据中包含足够的数据特征,通常情况下使用GBDT回归做预测分析效果会比时间序列更好。如果原始数据缺乏特征信息,使用时间序列进行预测反而很好。 来源: CSDN 作者: mbshqqb 链接: https://blog.csdn.net/mbshqqb/article/details/84300059

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