xgboost原理(无推导就轻易理解)

article/2025/9/13 9:11:09

一、模型训练过程

        贪心优化算法。多颗决策树串行训练,第一棵树拟合训练目标、第二颗树拟合前面的残差、第三棵树拟合前两棵树留下的残差。

1、残差来源:

(1)第k颗树训练时,行采样+列采样(即仅有部分样本、部分特征进入树中进行训练)进入树,决策树按照最大信息增益原则选择分裂特征、分裂点进行分裂;

(2)最终分裂完成之后,每个叶子节点上的分数由该叶子上的所有样本Y标签分布决定,如某叶子节点上正负样本比例:5:1,则该叶子节点分数为0.2(回归问题时为y均值,二分类时也为y均值/bad_rate);

(3)训练完成后,用前k颗树预测所有样本得到y^,y-y^即为前k颗树留下的残差(即第k+1棵树的训练目标,此处假设学习速率为1)

上图中,落到绿色子节点的样本预测概率【0,49/54,5/54】,即属于第一类的概率为0、第二类的概率为49/54、第二类的概率为5/54

2、学习速率/步长

        用来指定每棵树的学习步长,在1.中得到了下一颗树的训练目标(残差),以残差为目标在进行完一次迭代后/每训练完一棵树,会将叶子节点的分数*学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间、实现小步迭代的思路。注:默认情况下学习速率0.2

二、模型预测过程

        每棵树的预测结果相加得到最终的预测结果

三、目标函数:损失函数 + 正则项

·目标函数:模型训练的优化目标

·损失函数:用来衡量模型的预测效果

(1)对于回归问题,常用的损失函数是MSE

      

(2)对于分类问题,常用的损失函数是对数损失函数

·正则项:用于控制复杂程度 (alpha为L1正则项参数,lambda为L2正则项参数)

   

 (1)T表示叶子结点的个数,w表示叶子节点的分数向量,γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。

(2)叶子节点越多、模型越复杂、w的平方越大

四、XGB与GBDT的区别

1、泰勒二阶展开:GBDT只将目标函数泰勒展开到一阶,而xgboost对代价函数进行了二阶泰勒展开来近似模拟正式的损失函数、方便求解,支持自定义损失函数,只要函数可一阶和二阶求导。

2、加入正则项:xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合。

3、增加自动处理缺失值:

(1) 训练时,若特征m存在空值,当树按照特征m分裂时,先不考虑空值、按照m有值的序列选择最优分裂点进行分裂,然后再分别将空值样本带入左子节点和右子节点,计算两侧信息增益,保留整体信息增益较大的分裂方向,预测时空值样本也按照该方向进行分裂;

(2)训练时特征无空值,预测时空值样本默认分裂到左侧子节点

4、支持并行、多线程:xgboost的并行不是tree粒度的并行,而是在特征粒度上的,各个特征的增益计算就可以开多线程进行。

5、支持列抽样:xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。

6、传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

五、重要参数

params={'objective':'binary:logistic','eval_metric':'auc','booster': 'gbtree', #树模型'silent': 1, #是否打印'eta':0.3, #学习速率'num_boost_round': 100, #迭代次数'gamma':0, # 节点分裂所需的最先损失下降(惩罚项)'max_depth': 6, #树分裂最大深度,'min_child_weight' :100, #最小叶子节点样本权重和,调大减小过拟合,过高会欠拟合'subsample' : 1, #行采样'colsample_bytree' : 1, #列采样,单颗树进行列采样'colsample_bylevel' : 1, #列采样,子树的每层进行列采样'seed': 0, #随机种子,固定行、列采样'lambda':1, #权重的L1正则化项 'alpha': 0, #权重的L2正则化项'scale_pos_weight': 1, #调节样本平衡度'max_delta_step': 0, #限制每棵树权重改变的最大步长'nthread':None #最大可用线程数
}

六、过拟合调参

        模型的评估审核时一般都会有针对过拟合问题的要求:如要求train、test的auc相差小于0.03或train、test的ks相差小于0.04等;而在一些场景下训练的模型很容易过拟合,train、test的auc、ks相差较大,这种情况下我们不得不调整参数,有必要在损失一些模型精度的情况下来避免过拟合。

        调小max_depth  (3,6,1)

        调大min_child_weight  (100,2000,100)

        调大gamma  (0,10,2)

        调大 lambda 

        eta、num_round  调高eta,降低num_round, eta(0.01,0.2,0.02),num_round(50,1000,100)

        调低subsample & colsample_bytree  (0.6,1,0.1)


http://chatgpt.dhexx.cn/article/DG9mVfu7.shtml

相关文章

一文读懂机器学习大杀器XGBoost原理

【导读】XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。讲解其原理前,先讲解一下CART回归树…

XGBoost详解(原理篇)

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、XGBoost简介 二、XGBoost原理 1、基本组成元素 2、整体思路 (1)训练过程——构建XGBoost模型…

XGBoost 原理介绍

1.简介 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、灵活且可移植。XGBoost是大规模并行boosting tree的工具,它是目前最快最好的开源 boosting tree工具包,比常见的工具包快10倍以上。…

「Flink实时数据分析系列」6.基于时间和窗口的算子

来源 | 「Stream Processing with Apache Flink」 作者 | Fabian Hueske and Vasiliki Kalavri 翻译 | 吴邪 大数据4年从业经验,目前就职于广州一家互联网公司,负责大数据基础平台自研、离线计算&实时计算研究 校对 | gongyouliu 编辑 | auroral-L 全…

大数据Hadoop之——Flink DataStream API 和 DataSet API

文章目录 一、DataStream API概述二、什么是DataStream ?三、DataStream 数据处理过程1)Data Sources(数据源)1、Data Sources 原理2、Data Sources 实现方式1)基于文件2)基于套接字3)基于集合4…

数据挖掘常用算法整理

前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感…

C++ 26 常用算法

目录 一、概述 1.1 常用遍历算法 1.1.1 算法简介 1.1.2 for_each遍历算法 1.1.3 transform遍历算法 1.2 常用查找算法 1.2.1 算法简介 1.2.2 find 查找算法 1.2.3 find_if 查找算法 1.2.4 adjacent_find 查找算法 1.2.5 binary_search 查找算法 1.2.6 count 查找算法…

干货 | 轻松看懂机器学习十大常用算法

通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题。 每个算法都看了好几个视频,挑出讲的最…

常用十种算法

目录 1、二分查找算法(非递归)二分查找算法(非递归)介绍二分查找算法(非递归)代码实现 2、分治算法分治算法介绍分治算法的基本步骤分治算法最佳实践汉诺塔 3、动态规划动态规划算法介绍应用场景——背包问题 4、KMP算法*next数组生成KMP 算法介绍应用场…

Java常用算法

Java常用算法 一、二分查找算法(非递归) 1、介绍 ​ 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找。 ​ 二分查找法的运行时间为对数时间O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒…

五大常用算法学习笔记

一。分治算法:快速排序、归并排序、大整数乘法、二分查找、递归(汉诺塔) 基本概念:把一个复杂的问题分成若干个相同或相似的子问题,再把子问题分成更小的子问题… , 知道最后子问题可以简单的直接求解&…

常见算法

首页 论坛 新闻 文章 下载 源码 网友作品 合作开发 招聘 刻盘服务 编程爱好者光盘 请登陆或者注册新用户 用户名 密 码 记住密码 注册新用户 忘记密码了 您所在位置:编程爱好者论坛 — C/C语言讨论区 — 我见到过的一些常用算法 C/C语言讨论区:…

最常用算法汇总(一)

一、贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整…

十大常用算法

前言 最近在研究一些经常用到的东西想把它们做一个汇总,想了想用到最多的应该是排序算法,所以对排序算法做了个总结,并自己用C实现了一下。 一、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序…

常用十大算法

这里的讲解图主要使用的是尚硅谷韩顺平老师的图,请周知。 目录 二分查找(非递归) 分治算法 动态规划算法 KMP算法 贪心算法 普利姆(Prim)算法 克鲁斯卡尔(Kruskal)算法 迪杰斯特拉&a…

常见十大算法

优劣术语 - 稳定性 原本a在b前,ab,排序之后位置任然不变。不稳定性则相反 - 内排序 所有排序都在内存中完成。外排序数据放磁盘,排序通过磁盘内存的数据传输 - 事件复杂度 算法执行耗费的时间 - 空间复杂度 算法执行耗费的内存 In/out-place: 不占/占额…

常见的10种算法

常见的10种算法 数据结构研究的内容:就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。 算法研究的目的是为了更有效的处理数据,提高数据运算效率。数据的运算是…

常用的10 种算法

译者:claudio jandan.net/2014/05/31/10-algorithms.html Reddit 有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大。如果对算法有所了解,读这篇文章时你可能会问 “作者知道算法为何物吗?”&#x…

常用的十种算法

十种算法 1、二分查找算法(非递归) 1、介绍: 1)二分查找只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 2)二分查找算法的运行时间为对数时间O&…

基础夯实:基础数据结构与算法(二)

基础夯实:基础数据结构与算法(二) 常见的10种算法1、递归算法例题1:计算n!例题2:斐波那契数列例题3:递归将整形数字转换为字符串例题4:汉诺塔例题5:猴子吃桃例题6&#x…