集成学习之XGBoost原理

XGBoost详解(原理篇) XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。Note:关于Boosting算法详见博文集成学习详解_tt丫的博客-优快云博客XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。 阅读详情

1. 背景

XGBoost 的全称是eXtreme Gradient Boosting,它是Gradient Boosting Machine的一个c++实现,在计算速度和准确率上相比较于GBDT有较大的提升。作者为正在华盛顿大学研究机器学习的大牛陈天奇 。xgboost最大的特点在于,它能够自动利用CPU的多线程进行并行,同时在算法上加以改进提高了精度。它的处女秀是Kaggle的 希格斯子信号识别竞赛,因为出众的效率与较高的预测准确度在比赛论坛中引起了参赛选手的广泛关注。本文主要参考XGBoost官方文档Tutorials和陈大佬的slides来阐述一下自己的理解,如有不准确的地方,欢迎指正,谢谢!!!

2. 目标函数:Training Loss+Regularization

训练模型的主要任务是找到拟合训练数据集 ( X i , y i ) (X_i,y_i) (Xi​,yi​)的最佳参数 θ \theta θ。为了训练模型,需要定义目标函数度量模型拟合训练数据的程度。目标函数由两部分组成:训练损失和正则化项,其数学公式如下:

其中, L L L是误差损失函数,度量模型与训练数据的拟合度, Ω Ω Ω是正则化项,用来惩罚模型的复杂度。
一种常用的损失函数是MSE(the mean squared error),公式如下:
L ( θ ) = ∑ i ( y i − y ^ i ) 2 L(\theta)=\sum_i(y_i-\hat{y}_i)^2 L(θ)=i∑​(yi​−y^​i​)2
另一种损失函数是logistics loss,被用于逻辑回归。
L ( θ ) = ∑ i [ y i ln ⁡ ( 1 + e − y ^ i ) + ( 1 − y i ) ln ⁡ ( 1 + e y ^ i ) ] L(\theta)=\sum_i[y_i\ln(1+e^{-\hat{y}_i})+(1-y_i)\ln(1+e^{\hat{y}_i})] L(θ)=i∑​[yi​ln(1+e−y^​i​)+(1−yi​)ln(1+ey^​i​)]

正则化项被用来控制模型的复杂度,有利于防止过拟合。为了更好的理解正则化的作用,采用如下的一个例子进行分析。

上图左上角,给定用户对某话题的感兴趣程度与时间t的数据关系,通过一个目标函数来建模,拟合这些输入数据。右上角图中的模型虽然很好的拟合每一个输入数据,但是 s p l i t split split分片太多,导致模型的复杂度很高。左下角图的模型的复杂度很小,但是每一个数据的拟合偏差很大,导致损失函数很大。右下角的模型基本上拟合每一个数据,而且 s p l i t split split很少,模型复杂度很小。机器学习模型的通用原则是简单并且准确。从 b i a s − v a r i a n c e bias-variance bias−variance t r a d e o f f tradeoff tradeoff角度来分析,模型越简单, v a r i a n c e variance variance(方差)越小,模型预测越准确, b i a s bias bias(偏置)越小。模型选择通常是在 b i a s bias bias和 v a r i a n c e variance variance之间做一个折中,选择最合适的模型。

3. XGBoost模型

3.1 模型函数形式

给定 n n n个样本,每个样本 m m m个特征的数据集 D = { ( X i , y i ) } , ( ∣ D ∣ = n , X i ∈ R m , y i ∈ R ) D=\lbrace {(X_i,y_i)} \rbrace,(|D|=n,X_i \in R^m,y_i \in R) D={(Xi​,yi​)},(∣D∣=n,Xi​∈Rm,yi​∈R),XGBoost进行Additive Training,学习 K K K颗树,采用以下函数对样本进行预测:

其中, F \mathcal F F是回归树空间, f ( x ) f(x) f(x)是回归树(CART)

q q q表示每棵树的结构,将每一个样本映射到相应的叶子节点。 T T T是每棵树的叶子节点数量。每一个 f k f_k fk​对应一个独立的树结构 q q q和叶子节点权重 w w w。与决策树不同,每一颗回归树上的每一个叶子节点上包含一个连续score,我们用 w i w_i wi​表示第 i i i个叶子节点的score。对于一个样本实例,使用每一颗树( q q q)的决策规则将其划分到对应树的叶子节点并求和对应叶子节点的score( w w w)来计算最终的预测值。为了学习模型中的函数集合,通常最小化正则化目标函数。

l l l用来度量预测值 y ^ i {\hat y_i} y^​i​与目标值 y i y_i yi​误差的损失函数。 Ω ( f k ) Ω(f_k) Ω(fk​) 用来惩罚每棵回归树的复杂度。相比较GBDT,XGBoost的目标函数增加了正则化项,对叶子节点个数 T T T和叶节点分数 w w w进行惩罚,相当于在训练过程中做了剪枝,使得学习的模型更加不容易过拟合。

3.2 梯度提升树

上述的集成树模型不能使用传统的优化方法来优化求解,但是,集成模型可以通过Additive Training(Boosting)的训练方式来递归求解每棵树的模型。

y ^ i ( t ) \hat y^{(t)}_i y^​i(t)​表示第 i i i个实例在第 t t t次迭代的预测值,第 t t t次迭代后的模型预测值等于前 t − 1 t-1 t−1次模型预测值加上第 t t t棵树的预测值,递推公式如下:

y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat y^{(t)}_i=\hat y^{(t-1)}_i+f_t(x_i) y^​i(t)​=y^​i(t−1)​+ft​(xi​)

那么目标函数可写为:

上述公式中, y i , y ^ i ( t − 1 ) y_i,\hat y^{(t-1)}_i yi​,y^​i(t−1)​都是已知, f t f_t ft​未知,模型学习是第 t t t棵树 f t f_t ft​。将目标函数在 y ^ i ( t − 1 ) \hat y^{(t-1)}_i y^​i(t−1)​出进行二阶泰勒公式展开。
泰勒公式: f ( x + Δ x ) ≃ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta x)\simeq f(x)+f^{'}(x)\Delta x+\frac{1}{2}f^{''}(x)\Delta x^2 f(x+Δx)≃f(x)+f′(x)Δx+21​f′′(x)Δx2

其中, g i = ∂ y ^ ( t − 1 ) l ( y i , y ^ ( t − 1 ) ) g_i=\partial_{\hat y^{(t-1)}}l(y_i,\hat y^{(t-1)}) gi​=∂y^​(t−1)​l(yi​,y^​(t−1))和 h i = ∂ y ^ ( t − 1 ) 2 l ( y i , y ^ ( t − 1 ) ) h_i=\partial^2_{\hat y^{(t-1)}}l(y_i,\hat y^{(t-1)}) hi​=∂y^​(t−1)2​l(yi​,y^​(t−1))分别是损失函数的一阶导数和二阶导数。由于 l ( y i , y ^ ( t − 1 ) ) l(y_i,\hat y^{(t-1)}) l(yi​,y^​(t−1))是常数项,将其从原目标函数中移除得到一个新的简化目标函数:

将 f t , Ω ( f t ) f_t,\Omega(f_t) ft​,Ω(ft​)写成树结构的形式,即把下式代入目标函数中
f t ( x ) = w q ( x ) f_t(x)=w_{q(x)} ft​(x)=wq(x)​ Ω ( f t ) = γ T + 1 2 λ ∥ w ∥ 2 \Omega(f_t)=\gamma T+\frac{1}{2}\lambda \lVert w\rVert^2 Ω(ft​)=γT+21​λ∥w∥2

目标函数为:

为了将所有的节点统一起来,定义每个叶节点 j j j上的样本集合为 I j = { i ∣ q ( x i ) = j } I_j=\lbrace {i|q(x_i)=j} \rbrace Ij​={i∣q(xi​)=j},则目标函数可转化为叶节点累加的形式:

对于一个确定的树结构,即 q ( x ) q(x) q(x)确定,为了使目标函数最小化,可令其导数为0,求解得到每个叶节点的最优预测分数:

代入目标函数,得到最小损失为:

上述公式通常被用于度量树结构质量 q q q的打分函数。下图解释了score如何被计算。

4. 回归树的学习策略

当回归树的结构确定时,可推导出其最优的叶节点分数以及对应的最小损失值,那么是怎么确定树的结构呢?

  • 暴力枚举所有可能的树结构,选择损失最小的树结构,这是NP难问题。
  • 贪心算法,每次尝试分裂一个叶节点,计算分裂前后的增益,选择增益最大的特征及其对应的特征值作为分裂点。
XGBoost的打分函数

红色标记部分衡量了每个叶节点对总体损失的贡献,我们希望损失越小越好,则标红部分的值越大越好。因此,对一个叶节点进行分裂,分裂前后的增益定义为:

G a i n Gain Gain值越大,分裂后 L L L减小越多,所以当对一个叶节点分裂时,计算所有候选( f e a t u r e , v a l u e feature,value feature,value)对应的 G a i n Gain Gain,选择 G a i n Gain Gain值最大的分裂点进行分割。

5. 缩减与列取样

除了使用正则项,还有两种技术可用来防止过拟合: S h r i n k a g e Shrinkage Shrinkage(缩减)和 C o l u m n S u b s a m p l i n g Column Subsampling ColumnSubsampling(列取样)。 S h r i n k a g e Shrinkage Shrinkage在每棵提升树迭代后,增加了权重因子 η \eta η。与随机优化的学习率相似, S h r i n k a g e Shrinkage Shrinkage降低了每棵树结构和对应的叶节点对整体树模型的影响程度。列取样事实上是特征取样,类似于 R a n d o m F o r e s t Random Forest RandomForest的 b a g g i n g bagging bagging思想,有利于防止过拟合,而且提升了并行计算的速度。

y ( t ) = y ( t − 1 ) + η f t ( x i ) y^{(t)}=y^{(t-1)}+\eta f_t(x_i) y(t)=y(t−1)+ηft​(xi​)

6. 树节点分裂方法(Split Finding Algorithms)

6.1 精确算法(Basic Exact Greedy Algorithm)

遍历所有特征的所有可能分割点,计算对应的 G a i n Gain Gain值,选择 G a i n Gain Gain值最大的( f e a t u r e , v a l u e feature,value feature,value)作为分割点进行分割。为了提升计算效率,在分割前首先对每一个 f e a t u r e feature feature进行 f e a t u r e feature feature v a l u e value value排序,然后有序的遍历特征值计算梯度统计( g i , h i g_i,h_i gi​,hi​)。

6.2 近似算法(Approximate Algorithm)

问题:精确算法由于贪婪地遍历了所有特征对应所有可能分裂点,因此这种算法非常损耗性能。而且,当数据量很大时,无法全部加载到内存,导致无法进行有效的特征排序并计算对应的增益 G a i n Gain Gain。
对于每个特征,近似算法依据特征分布的分位点提出候选分裂点,然后将连续特征映射到由候选分裂点划分的 b u c k e t s buckets buckets中,加速了梯度统计和计算速度。

  • G l o b a l Global Global:初始化每棵树结构之前,提出所有的候选切分点。
  • L o c a l Local Local:每次分裂前,重新提出候选切分点

近似算法实例:三分位数

6.3 加权分位数(Weighted Quantile Sketch)

数据集 D k = { ( x 1 k , h 1 ) , ( x 2 k , h 2 ) . . . . ( x n k , h n ) } \mathcal {D}_k=\lbrace {(x_{1k},h_1),(x_{2k},h_2)....(x_{nk},h_n)} \rbrace Dk​={(x1k​,h1​),(x2k​,h2​)....(xnk​,hn​)}表示每个训练样本的第k个特征值和对应的二阶导数梯度统计 h i h_i hi​。定义一个排序函数 r k : R → [ 0 , + ∞ ] : r_k:R\to [0,+\infty]: rk​:R→[0,+∞]:

上式表示 k − t h k-th k−th特征值小于 z z z的样本百分比,目标是寻找候选分裂点 { s k 1 , s k 2 . . . . s k l , } \lbrace {s_{k1},s_{k2}....s_{kl},} \rbrace {sk1​,sk2​....skl​,}

其中 ϵ \epsilon ϵ是近似因子,意味着有 1 / ϵ 1/\epsilon 1/ϵ个候选分裂点,每一各数据都有一个权重 h i h_i hi​。实际上XGBoost是以二阶导数值作为权重来选择候选分裂点。

目标函数整理成以下形式,可看出 h i h_i hi​对 l o s s loss loss有加权的作用。

∑ i = 1 n 1 2 h i ( f t ( x i ) + g i / h i ) 2 + Ω ( f t ) + c o n s t a n t \sum_{i=1}^n\frac{1}{2}h_i(f_t(x_i)+g_i/h_i)^2+\Omega(f_t)+constant i=1∑n​21​hi​(ft​(xi​)+gi​/hi​)2+Ω(ft​)+constant

6.4 稀疏值分裂(Sparsity-aware Split Finding)

实际输入数据存在大量的稀疏值,原因有以下三种:

  1. 数据中存在大量的缺失值
  2. 数据统计中大量的零数值
  3. o n e − h o t one-hot one−hot编码

为了选择稀疏值分裂方向,每一个树节点提出了一个默认方向,当数据缺失时,样本会被分到默认方向的树节点。从非缺失训练样本 I k I_k Ik​学习最优的默认方向。

7. 系统设计

7.1 Column Block for Parallel Learning

对于训练树模型,最耗时的部分是对数据排序,为了减少排序的时间耗费,提出将数据存储到内存单元( b l o c k block block)。

  • 特征预排序,以column block的结构存于内存
  • 存储样本索引
  • block中的数据以稀疏格式(CSC)存储

这个结构加速了 s p l i t split split f i n d i n g finding finding的过程,只需在训练树之前排序一次,在后面的迭代过程中可以重复使用,后面节点分裂时直接根据索引得到梯度统计。
每一列 c o l u m n column column的统计信息可并行化,用于分裂点划分。而且, c o l u m n column column b l o c bloc block结构可支持列取样。

7.2 Cache-aware Access

c o l u m n column column b l o c k block block按特征大小顺序存储,根据 r o w row row索引获取对应的梯度统计,然而每个数据相应的样本梯度信息在内存中是分散的,造成内存的不连续访问,降低了 C P U CPU CPU c a c h e cache cache命中率。

缓存优化方法

  • 预取数据到 b u f f e r buffer buffer(非连续->连续),统计梯度信息
  • 调节 b l o c k block block的大小
XGBoost的其他特性
  • 行取样
  • 支持自定义损失函数(二阶可导)

8. XGBoost参数解析

xgboost有两种接口:xgboost自带的API和scikit-learn的API,参数用法大致相同。
在执行XGBoost之前,首先设置三种类型的参数:general parameters、booster parameters和task parameters。

  • General parameters(通用参数):与用于提升的提升器相关,一般是基于tree模型和基于linear模型。
  • Booster parameters(提升器参数):取决于选择哪一种提升器。
  • Learning task parameters(学习目标参数):取决于学习场景,例如回归任务通常设置不同的参数用于排序任务。
8.1 General Parameters
  • booster [default=gbtree]
    • 选择使用哪一种提升器,通常是gbtree,gblinear或者dart;gbtree和dart使用基于树模型而gblinear使用基于线性模型
  • verbosity [default=1]
    • 打印信息的标识。有效值0(silent),1(warning),2(info),3(debug)。如果XGBoost尝试基于根据启发式更改配置,将会发出警告消息。如果有意外行为发生,请增加verbosity值。
  • nthread [default to maximum number of threads available if not set]
    • 运行XGBoost并行执行线程的数量
  • disable_default_eval_metric [default=0]
    • flag使得默认指标无效,设置大于零使其无效。
  • num_pbuffer [set automatically by XGBoost, no need to be set by user]
    • 预测值buffer的大小,通常设置训练样本的数量,缓存区被用来保存上一个Boosting的预测结果。
  • num_feature [set automatically by XGBoost, no need to be set by user]
    • Boosting使用的特征维度,通常设置特征最大维度
8.2 Booster Parameters
  • eta [default=0.3, alias: learning_rate]
    • 为了防止过拟合,在更新过程中使用收缩步长。在每次提升计算之后,通常会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加健壮。取值范围为[0,1]
  • gamma [default=0, alias: min_split_loss]
    • 在树的叶节点上进行进一步划分所需的最小损失减少,gamma越大,算法越保守。取值范围 [ 0 , ∞ ] [0,\infty] [0,∞]
  • max_depth [default=6]
    • 树的最大深度,增加这个值将会使模型更加复杂,而且很容易过拟合。取值范围 [ 1 , ∞ ] [1,\infty] [1,∞]
  • min_child_weight [default=1]
    • 满足子节点的最小样本权重之和,如果树分区导致叶节点的样本权重之和小于min_child_weight ,将会停止进一步的划分。在回归模型中,这个参数是指建立每个模型所需要的最小样本数。min_child_weight值越大,算法越保守。取值范围 [ 0 , ∞ ] [0,\infty] [0,∞]
  • max_delta_step [default=0]
    • Maximum delta step we allow each leaf output to be. If the value is set to 0, it means there is no constraint. If it is set to a positive value, it can help making the update step more conservative. Usually this parameter is not needed, but it might help in logistic regression when class is extremely imbalanced. Set it to value of 1-10 might help control the update.取值范围 [ 0 , ∞ ] [0,\infty] [0,∞]
  • subsample [default=1]
    • 训练样本的子样本比例。设置为0.5表明XGBoost将随机取样一半的训练数据去训练树模型,而且防止过拟合。每次Boosting迭代都会进行子取样。取值范围(0,1]
  • colsample_bytree [default=1]
    • 构建每棵树时对特征采样的比例。取值范围(0, 1]
  • lambda [default=1, alias: reg_lambda]
    • L2正则项的惩罚系数,增加lambda,将会使模型更加健壮,防止过拟合。
  • alpha [default=0, alias: reg_alpha]
    • L1正则项的系数,增加alpha,将会使模型更加健壮,防止过拟合。
  • scale_pos_weight [default=1]
    • 控制正负权重的平衡,在类别高度不平衡的情况下,将参数设置大于0,可以加快收敛。
8.3 Learning Task Parameters
  • objective [default=reg:squarederror]
    • reg:squarederror: 平方损失的回归
    • reg:logistic: 逻辑回归
    • binary:logistic: 二分类的逻辑回归问题,输出为概率
    • binary:logitraw:二分类的逻辑回归问题,输出结果为 w T x w^Tx wTx
    • count:poisson:计数问题的poisson回归,输出结果为poisson分布。
    • multi:softmax:XGBoost采用softmax目标函数处理多分类问题,同时需要设置num_class
    • multi:softprob:和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。没行数据表示样本所属于每个类别的概率
    • rank:pairwise:使用LambdaMART执行pairwise排序,使其损失最小化。
  • base_score [default=0.5]
    • 所有实例的初始化预测score,相当于全局偏置
  • eval_metric [default according to objective]
    • 验证数据所需要的评价指标,根据目标函数选择默认的评价指标(rmse for regression, and error for classification, mean average precision for ranking)
    • 用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是map参数list参数不会覆盖’eval_metric’
    • The choices are listed below:
      • rmse: root mean square error
      • mae: mean absolute error
      • logloss: negative log-likelihood
      • error:二分类错误率,计算公式为#(wrong cases)/#(all cases)。对于预测,评估将会将预测值大于0.5的实例视为正样本,否则看做负样本。
      • merror: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
      • mlogloss: Multiclass logloss.
      • auc: Area under the curve
      • aucpr: Area under the PR curve
      • ndcg: Normalized Discounted Cumulative Gain
      • map: Mean Average Precision
      • ndcg@n, map@n: ‘n’ can be assigned as an integer to cut off the top positions in the lists for evaluation.
      • poisson-nloglik: negative log-likelihood for Poisson regression
      • gamma-nloglik: negative log-likelihood for gamma regression
  • seed [default=0]
    • 随机数的种子
  • dtrain:训练的DMatrix数据
  • num_boost_round:Boosting迭代的次数
  • evals:一个列表,用于对训练过程中进行评估列表中的元素,形式evals = [(dtrain,‘train’),(dval,‘val’)]或者是evals = [(dtrain,‘train’)],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果
  • obj:自定义目的函数
  • feval:自定义评估函数
  • maximize:是否对评估函数进行最大化
  • early_stopping_rounds:早期停止次数 ,假设为100,验证集的误差迭代到一定程度在100次内不能再继续降低,就停止迭代。这要求evals 里至少有 一个元素,如果有多个,按最后一个去执行。返回的是最后的迭代次数(不是最好的)。如果early_stopping_rounds存在,则模型会生成三个属性,bst.best_score,bst.best_iteration和bst.best_ntree_limit
  • evals_result:字典,存储在watchlist中的元素的评估结果。
  • verbose_eval :(可以输入布尔型或数值型),也要求evals里至少有 一个元素。如果为True,则对evals中元素的评估结果会输出在结果中;如果输入数字,假设为5,则每隔5个迭代输出一次。
  • learning_rates:每一次提升的学习率的列表
  • xgb_model:在训练之前用于加载的xgb model

在知乎上看到一个值得思考的问题,贴出来以供大家参考,来源于知乎
讨论:xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?

  • 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
  • xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
  • Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
  • 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
  • 对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
  • xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
  • 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
参考文献
机器学习---xgboost算法 问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。 阅读详情

相关推荐

深入详解集成学习:AdaBoost与XGBoost的原理、实现及在医学影像领域的应用

本文深入探讨了集成学习中的AdaBoost和XGBoost算法,详细介绍了它们的原理、数学推导及在医学影像领域的应用。AdaBoost通过迭代调整样本权重和加权投票提升模型性能,特别适合小样本医学数据;XGBoost则基于梯度提升框架,通过二阶泰勒展开和正则化实现高效优化。文章提供了完整的代码实现示例,展示了这两种算法在乳腺癌诊断等医学影像分析任务中的实际应用。这些方法因其出色的性能和可解释性,成为医学影像分析的重要工具。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 907

XGBoost模型详解

1.什么是XGBoost?   GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t−1t-1t−1 棵树的预测结果与训练样本真实值的残差。XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。 2.XGBoost的核心原理 2.1 如何构造目标函数?   对于一个给定有 nnn 个样本和

weixin_44852067的博客 2万+

集成学习——XGBoost原理理解

XGBoost全称为Extreme Gradient Boosting,它是2016年陈天奇和Carlos Guestrin在国际AI顶会ACM SIGKDD(知识发现与数据挖掘会议)上的正式发布,论文详见《XGBoost: A Scalable Tree Boosting System》。在此之前,XGBoost的作者已经在各种国际数据竞赛网站例如kaggle等用该算法和这套系统取得了瞩目的成绩...

weixin_44750583的博客 1187

XGBoost算法介绍

XGBoost算法介绍一、简介二、基本原理三、目标函数新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、简介   XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树,是boosting

Silence的博客 5万+

集成学习综述—bagging/随机森林/adaboost/GBDT/XGBoost/LightGBM/catboost 原理和代码介绍

集成学习介绍 文章目录集成学习介绍1 基本概念1.1 定义基本定义集成学习类别参考链接1.2 基学习器(CART)介绍公式介绍例子讲解代码实践参考链接1.3 偏差(bias)和方差(var)公式推导图解参考链接2 Boosting类2.1 原理2.2 AdaBoost2.2.2 公式推导2.2.3 优点与不足优点不足应用2.2.4 代码实践2.2.5 参考链接2.3 GBDT原理介绍代码实践参考...

fzl的博客 4615

集成学习:XGBoost(原理篇)

关于XGBoost的一个原理总结,足够知道XGBoost是怎么一回事,但是也仅限知道XGBoost是怎么一回事,以后会有更深入的补充。关于代码可以参考参考资料中的代码,原创代码估计很久以后才会有,待续。。。接下来就是LightGBM的总结

Lian_Ge_Blog的博客 1782

【机器学习】XGBoost

XGBoost(eXtreme Gradient Boosting)极度梯度提升树,属于集成学习中的boosting框架算法。对于提升树,简单说就是一个模型表现不好,继续按照原来模型表现不好的那部分训练第二个模型,依次类推。本质思想与GBDT一致,构建多个基学习器使用加法模型,学习前面基学习器的结果与真实值的偏差,通过多个学习器的学习,不断降低模型值和实际值的差。最终模型的预测结果是由所有基学习器预测结果的加和。

Dong_ZH的博客 1万+

集成学习Boost方法全解析:从原理到XGBoost、LightGBM实战应用

集成学习是机器学习中一种通过组合多个弱学习器来构建强学习器的核心方法,其核心思想在于通过降低偏差和方差来提升模型的泛化能力与预测精度。其技术价值在于能够有效处理复杂的非线性关系,并在各类预测任务中展现出卓越性能,广泛应用于金融风控、推荐系统和数据科学竞赛等场景。其中,Boost(提升方法)作为集成学习的重要分支,通过迭代调整样本权重,专注于先前被错误预测的样本,从而显著提升模型性能。本文深入探讨了以AdaBoost、GBDT、XGBoost和LightGBM为代表的Boost主流框架,并提供了从数据预处理、

weixin_34185320的博客 533

集成学习之随机森林、Adaboost、Gradient Boosting、XGBoost原理及使用

Bagging是并行式集成学习最著名的代表,它是基于自助采样法 (bootstrap sampling)给定包含m个样本的数据集,先随机取出一个样本放入采 样集中并记录,再把该样本放回初始数据集,使得下次采样时 该样本仍有可能被选中,这样,经过m次随机采样操作,我们 得到含m个样本的采样集,初始训练集中有的样本在采样集里 多次出现,有的则从未出现(平均37%没有取到)。带外数据OOB(Out of Bag)

m0_64336780的博客 1万+

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

集成学习 文章目录集成学习学习目标5.3 Boosting1.boosting集成原理1.1 什么是boosting1.2 实现过程:1.训练第一个学习器2.调整数据分布3.训练第二个学习器4.再次调整数据分布5.依次训练学习器,调整数据分布**6.整体过程实现**1.3 api介绍2 GBDT(了解)2.1 梯度的概念(复习)2.2 GBDT执行流程2.3 案例2.4 GBDT主要执行思想3.X...

汪雯琦的博客 871

机器学习算法实战系列:集成学习王者XGBoost与LightGBM原理与实战

顺序训练一系列弱学习器每个新模型都专注于纠正前一个模型的错误组合所有弱学习器形成强学习器AdaBoost算法回顾增加被错误分类样本的权重最终预测是加权投票“掌握XGBoost和LightGBM,你就能解决工业界90%的结构化数据问题!现在你已拥有这些冠军算法的完整知识体系。参加Kaggle比赛实践所学知识深入研究算法源代码实现尝试在不同业务场景中应用在下一篇文章中,我们将探索无监督学习的奥秘,从聚类到降维,揭示数据背后的隐藏模式!敬请期待!延伸阅读XGBoost官方文档。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1783

集成学习Boosting原理全解析:从AdaBoost到XGBoost实战指南

集成学习是机器学习中一种重要的元策略,其核心思想是通过组合多个弱学习器来构建一个强学习器,从而提升模型的整体预测性能。这一方法基于统计学习中的偏差-方差分解理论,通过降低方差或偏差来获得更稳健的模型。在工程实践中,集成学习展现出强大的技术价值,广泛应用于分类、回归等任务,尤其在数据竞赛和工业场景中表现突出。Boosting作为集成学习的主流方法之一,采用串行方式训练基学习器,每一轮都重点关注前一轮的预测错误,通过迭代优化不断提升模型精度。其代表性算法如AdaBoost、GBDT、XGBoost和LightG

weixin_34203832的博客 375

【UV打印机】PrintExp打印软件教程(四)-设置校准电压

序号名称功能说明1校准材料设置定义当前打印材料,不同的材料参数绑定不同的校准值2向导勾选进行校准向导操作3校准类型包括喷头安装、步进校准、喷头间距、套色校准、双向校准4类型子项同类型子项5操作步骤校准存在步骤和校准说明示意图。

Print World的专栏 5074

ML-集成学习:AdaBoost、Bagging、随机森林、Stacking(mlxtend)、GBDT、XGBoost、LightGBM、CatBoost原理推导及实现

目录 1.名称简介 2.设计集成原则 3.集成学习算法分类 4.Boosting 4.1基本流程 4.2Adaboost实现 4.2.1.分类 4.2.2.回归 4.2.3Adaboost的正则化 4.2.4Adaboost小结 5.Bagging 5.1基本流程 6.随机深林Random Forest 6.1基本流程 7.Stacking 8.GBDT 8.1...

千寻的博客 7547

深度学习、图像分类入门,从VGG16卷积神经网络开始

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路: 一、我认为学习卷积神经网络必须知道的几个概念: 1、卷积过程:   我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大

Errors_In_Life的博客 16万+

4D毫米波雷达与激光雷达融合评测:3种主流融合框架在极端天气下的性能对比

本文深度评测了4D毫米波雷达与激光雷达在极端天气下的三大融合框架性能,包括前融合、特征级融合和后融合。通过实测数据对比,揭示了多传感器融合在暴雨、浓雾等恶劣环境中的显著优势,为自动驾驶感知系统提供了关键的技术参考和工程实践指南。

weixin_28677005的博客 330

集成学习5-Xgboost原理与调参

github地址:DataScicence欢迎star 集成学习4-前向分步算法与GBDT-原理与案例 集成学习3-Boosting的原理和案例 集成学习2-bagging的原理与案例分析 集成学习1-投票法的原理和案例分析 Xgboost原理与调参XGBoost原理目标函数定义树模型重构目标函数求解w和L:寻找最佳分支Xgboost案例加载数据集训练模型绘制特征重要性调参 XGBoost原理 Xgboost的大致原理与GBDT相似,但是在部分步骤中进行了改进 目标函数 xgboost与GBDT最大的.

weixin_43822124的博客 4240

百度贴吧爬虫实战:完整实现与使用指南

使用 csv 模块创建写入器,首先写入表头("标题" 和 "链接"),然后遍历帖子字典,将每个标题和链接作为一行写入文件。首先检查内容是否为空,然后通过查找 JSON 结构的起始({)和结束(})位置,提取有效的 JSON 片段。接着遍历帖子列表中的每个条目,提取标题文本和对应的链接,对于相对路径的链接会自动补全为完整的 URL。从 JSON 提取标题和链接此方法专门用于从解析后的 JSON 数据中提取帖子标题和对应的链接。提取到的标题和链接以字典形式返回,键为标题,值为对应的完整链接。

qq_63736560的博客 2016

集成学习-xgboost原理

文章目录目标函数构造目标函数目标函数优化问题基于决策树的目标函数选择分裂节点策略1、贪心算法2、近似算法3、加权分位数稀疏感知算法 目标函数 xgboost是由k个基模型组成的一个加法运算式。 模型的预测精度由模型的偏差和方差共同决定,我们追求偏差小方差小的模型。 损失函数代表了模型的偏差,提升模型复杂度可以减小偏差。 但模型过于复杂时容易过拟合,使用正则项抑制模型复杂度。选用抑制模型复杂度的正则项Ω\OmegaΩ 来衡量。 增加模型的复杂度通常会显著提升模型的方差并减少偏差。反过来,降低模型的复杂度则会

Die Luft der Freiheit weht 833

深入解析AXI-Stream协议中的TVALID与TREADY握手时序

本文深入解析AXI-Stream协议中TVALID与TREADY的握手时序,通过实际案例和代码示例详细说明三种典型握手场景及其应用。文章还探讨了常见握手失败案例的解决方法,并介绍了TLAST、TKEEP等高级信号的使用技巧,帮助开发者优化FPGA设计中的数据传输效率。

weixin_29200485的博客 341

机器学习实战1-四种算法对比对客户信用卡还款情况进行预测与模型评估

大家好,我是微学AI,今天给大家带来一个机器学习实战案例:利用机器学习的四种算法对比对客户信用卡还款情况进行分类。信用卡又叫贷记卡,是由商业银行或信用卡公司对信用合格的消费者发行的信用证明。现在的年轻人,特别是80后,90后甚至00后到喜欢超前消费,每个人名下多多少少都有至少一张信用卡,有些人由于过度超前消费,导致下个月无法还款导致的逾期,这样会对个人征信产生影响,今天我们就来分析分析具有哪些特性的人会有信用卡逾期的可能。

微学AI的博客 4710

集成学习XGBoost原理

转自:https://www.jianshu.com/p/c558d0448ac7 boosting翻译过来就是提升的意思,通过研究如果将许多个弱分类器集成在一起提升为一个强分类器就是多数boosting算法所研究的内容。其中最为经典的算法就是Adaboost,gdbt,xgboost等算法,本文将从xgboost的原理出发,带大家理解boosting算法。由于xgboost是提升树模型,所以它...

Tanya_girl的博客 521

成功解决AttributeError: ‘ImageDraw‘ object has no attribute ‘textsize‘

​ 成功解决AttributeError: 'ImageDraw' object has no attribute 'textsize' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'ImageDraw' object has no attribute 'textsize' 解决思路 属性错误:'ImageDraw'对象没有属性'textsize' 解决方法 最新的Pillow 10.0.0 版本已经删除了这个函数,导致两个库(Pillow 、wordc

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4775

机器学习集成学习进阶Xgboost算法原理

目录 1 最优模型的构建方法 2 XGBoost的目标函数推导 2.1 目标函数确定 2.2 CART树的介绍 2.3 树的复杂度定义 2.3.1 定义每课树的复杂度 2.3.2 树的复杂度举例 2.4 目标函数推导 3 XGBoost的回归树构建方法 3.1 计算分裂节点 3.2 停止分裂条件判断 4 XGBoost与GDBT的区别 5 小结

赵广陆 834

基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案

最小 MVP:本地知识库 + Doubao Embedding + 简单检索。工具化:把检索/写入/系统功能通过 MCP 封装。Agent 编排:RAG 流程 + 自检 + 引用输出。这样你就可以快速落地一个基于豆包 + 本机知识库的 MCP Agent。

lpfasd123的博客 1095

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Scala安装
下一篇: LightGBM原理详解
code__online
博客等级 码龄9年 142粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值