学习笔记——从一棵决策树开始学习树模型_Continual Learning...

树模型


决策树

如何切分特征,衡量标准:熵值

熵:表示随机变量不确定性的度量

熵值下降的越多,分类结果更为干净,分类效果更好。so 当前特征选择效果更好
H ( x ) = − ∑ p i ∗ l o g 2 p i , i = 1 , 2 , 3 , 4 , . . , n H(x)=-\sum{p_i*log_2p_i} , i=1,2,3,4, .., n H(x)=pilog2pi,i=1,2,3,4,..,n
(pi分类后某一样本的概率)

经过分类后不确定性减少的程度被称为信息增益,将其量化可表示为原熵值和分类后熵值的差值

决策树构造示例

背景介绍:样本数据一共有14个,根据outlook特征分类结果如下:

image-20250428114652055

熵值计算以及信息增益(gain)计算过程如下:

image-20250428114753546

总结:决策树选取特征节点后分类结果熵值下降的差值越大,信息增益越大,特征分类效果越好。

决策树算法

  • ID3:信息增益 (以ID划分时没有意义?)
  • C4.5:信息增益 (原熵值和分类后熵值的比值,相对于ID3有什么提高?)
  • CART{全称 分类与回归树(classification and regression tree)}:使用GINI系数 (GINI系数越大,不确定性越大)

G i N i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ n = k K p k 2 GiNi(p)=\sum_{k=1}^{K}{p_k}(1-p_k)=1-\sum_{n=k}^{K}{p_k^2} GiNi(p)=k=1Kpk(1pk)=1n=kKpk2

Cart树(TODO 回归过程不理解)

回归树的生成:回归是基于平方误差来进行划分的:

输入:训练数据集 D D D

输出:回归树 f ( x ) f(x) f(x)

1)选择最优切分变量j与切分点s,求解:
m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c1}\sum_{x_i∈R_1(j,s)}(y_i−c_1)^2+minc2\sum_{x_i∈R_2(j,s)}(y_i−c_2)^2] minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
遍历变量j和切分点s,使上式最小。

2)用划定的区域决定输出值:这里取划定的区域的平均值就是最优的(具体可以通过推到证明,对() ∑ x i ∈ R ( j , s ) ( y i − c ) ∑_{xi∈R(j,s)}(y_i−c) xiR(j,s)yic求导可以得到, c c c y i y_i yi的平均值时最小)。

3)重复对两个子节点进行划分,直到满足停止条件(特征已经用完、子节点样本是同一类、子节点中没有样本、达到预设最大深度等)。

分类树的生成:分类时基于Gini系数来进行划分的:

输入:训练数据集 D D D

输出: 分类树

1)对每个特征A进行遍历,并遍历其对应的值a.根据样本A=a的测试‘是’或‘否’将其划分为两个部分

2)根据Gini系数,选择Gini系数最小的特征及其划分值。

3)重复1)~2)直至满足停止的条件(节点中样本数小于阈值、gini系数小于阈值、没有更多特征)。

决策树剪枝

​ 决策树的生成刚才往往是达到某个预设条件才停止,但是这会存在一个问题就是:对训练数据拟合的很好,但是对测试集泛化效果不佳,俗称过拟合。也就是说,在分类结果上由于太过细致,叶子节点上子节点(孩子节点)特征过强,对于预测数据来说若特征无法完全对齐则预测效果很差,使得模型泛化能力降低。

​ 这里,对已生成的决策树进行简化,称之为决策树的剪枝(pruning)。剪枝算法有很多,这里介绍一种比较通用且简单的剪枝算法。

设树 T T T的叶节点个数为 ∣ T ∣ |T| T,t是树的叶子节点,叶子节点 t t t N t N_t Nt个样本,其中 k k k类样本有 N t k N_{tk} Ntk个,共 K K K个类别, H t ( T ) H_t(T) Ht(T)为叶子节点上的经验熵, α > = 0 α>=0 α>=0为参数,则决策树剪枝过程中的损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_\alpha(T) = \sum_{t=1}^{|T|} N_t H_t(T) + \alpha |T| Cα(T)=t=1TNtHt(T)+αT
其中,
H t ( T ) = − ∑ k = 1 K N t k N t log ⁡ N t k N t H_t(T) = -\sum_{k=1}^K \frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t} Ht(T)=k=1KNtNtklogNtNtk
可以看出, C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T) = C(T) + \alpha |T| Cα(T)=C(T)+αT,

其中 C ( T ) C(T) C(T)为对训练集的经验损失, α α α则控制着模型的复杂程度, α α α越大则模型越简答,否则则越复杂。 C α ( T ) C_α(T) Cα(T)代表着决策树对训练集的预测误差和决策树复杂程度之间的平衡。

总之在剪枝时,树的叶节点回缩后损失函数值下降,那么则可以继续剪枝,弱损失函数值变大,则停止剪枝。

预剪枝

边建立决策树边进行剪枝,值得一说的是对于连续值的特征,树会对其进行一个连续值离散化的处理,例如不断采取二分法穷举样本划分,选取信息增益最大的划分方式就是一个连续值特征离散化的过程。

剪枝策略可采用:限制深度、限制叶子节点个数、叶子节点样本数、信息增益量等。

后剪枝

建立完决策树再进行剪枝,通过一定的衡量标准来决定剪枝,例如 C α ( T ) = C ( T ) + α ∣ T l e a f ∣ C_{\alpha}(T) = C(T) + \alpha |T_{leaf}| Cα(T)=C(T)+αTleaf(叶子节点越多,损失越大), α \alpha α可以进行调控, α \alpha α越大节点侧重越强, T l e a f T_{leaf} Tleaf代标叶子节点个数, C ( T ) C(T) C(T)损失熵。

问题:后剪枝更为推荐吗?

答:预剪枝在效率上占优,能快速产出小树并节省训练时间,但它容易欠拟合,且因“地平线效应”丢失深层模式。相比之下,后剪枝以先全量生长后再精细裁剪的方式,通常能获得更好的泛化效果,只需调一个复杂度参数,就能平衡模型的偏差与方差。正因如此,后剪枝在工业和学术界仍是决策树简化的主流选择。

Cart树剪枝

Cart树剪枝算法有两步组成:

1)基于生成算法产生的初始树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根节点,不断剪枝的过程中行成了一个子树序列 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0,T1,...,Tn

2)通过交叉验证的方式,来对子树序列进行验证,从而在子树序列中选择出最优子树。

Carts树剪枝的优势

Cart树剪枝相较于之前介绍的决策树剪枝是有一定优势的,Cart树剪枝是基于计算预先抽取的子树序列的,比如6层的决策树,假设剪枝到第5层的树比剪枝到第4层的树更优,剪枝到第3层的树比剪枝到第5层的树更优。如果用之前的方法,剪枝到第5层就会停下来了,但是这里的cart树剪枝就不存在这个问题。

分类任务与决策任务


分类任务

评估标准通过熵值来判断结果划分是否合适,取叶子节点对应样本的众数标签来作为分类结果

三分类任务实例

基于花瓣长度分类ABC三类花的树模型构建。

限制最大深度为2的三分类任务树实体化图:

image-20250428205737125

决策树边界条件图(看不太懂,竖直线为切分区域?):

image-20250428205651776

回归任务

评估标准通过划分样本的方差来判断,差异程度大,方差就会变大,所以划分结果方差越小,划分效果越好。

回归任务预测的输出 y y y是一个连续值,最后分类结果的值是根据其叶子节点中的样本均值作为分类结果。(因为连续值不具备离散的特征,所以讨论众数的意义不大)

问题:决策树对数据敏感?角度敏感?

决策树采用轴对齐(axis-aligned)的方式,在每次分裂时仅对单一特征设定阈值进行二分,因此,当数据分布的“最佳”分割方向不是与坐标轴平行时,决策树需要多次分裂才能近似拟合该方向,这就导致了对数据旋转角度坐标系变换的敏感性

回归树模型

回归树主要是评估指标不同,计算损失的方法不同,对于回归而言,是根据类似的样本即方差小的样本放到一起。

mse评估指标:均方误差(计算每个y和节点样本均值的差异)。

回归树模型(默认用cart,所以所有的树都是一个二叉树)构建实例:

image-20250428211009063

对回归模型限制叶子节点必须具有的最小样本数所带来的不同划分效果:

image-20250428211652317

左边划分过于复杂,过拟合问题严重,右边就正常多了。

决策树的正则化

当前节点切分情况过拟合,可通过正则化避免过拟合情况发生。

DecisionTreeClassifier类还有一些其他参数类似地限制了决策树的形状,也可以理解为限制叶子节点的数量:

  • min_samples_split(节点在分割之前必须具有的最小样本数)
  • min_samples_ leaf(叶子节点必须具有的最小样本数)
  • max leaf nodes(叶子节点的最大数量)
  • max features(在每个节点处评估用于拆分的最大特征数) (正常不用,通过树深度做限制)
  • max_depth(树最大深度)

集成算法

Bagging(训练多个树模型来得到结果再平均取折中数,代表:随机森林)

Boosting(梯度提升算法,每次训练都加权处理,使得加入一个树后比不加入结果要更好)

Stacking(聚合多个分类或回归模型)三种集成方法

随机森林(bootstrap aggregation)

说白了就是并行训练一堆分类器(树)

算法划分两部分理解,

森林:其实就是很多决策树并行放在一起,对于分类任务,熵值信息增益一套下来构建的树,通过构建的树进行预测结果,每棵树的结果进行统计,最后取统计结果中概率最大的类别作为输出。对于回归任务而言,每棵树的输出结果进行加权取均值的操作,取均值作为输出。

随机:如果每棵树的训练集data都一样,熵值计算方法一样,那么他的特征选取肯定也就一样,100棵树预测出来得结果完全相同,森林的存在就失去了意义,此时对样本进行随机选取,例如每棵树都是随机选取样本的90%,那么每棵树的样本不同,特征选取也就不同,预测结果当然也会产生差异。此为对随机概念的理解。

  • 随机森林的优势:

  • image-20250428214058291

  • 特征选择:通过熵值和信息增益,均方误差选取

  • 关于可以给出哪些feature比较重要:通过破坏某一特征的数据,观察误差率,误差率差别越大,feature越重要(上图右下角即为特征重要性排序)

理论上越多的树效果会越好,但实际上基本超过一定数量就差不多上下浮动了

image-20250428214728330

可见当树模型超过20的时候提升较小了

问题:为什么说只拿树模型玩集成算法就比较好?

答:首先树模型相对于神经网络或者其他深度学习模型来说,它的可解释性更强,咱们很好理解他的分类逻辑,无非是根据训练出来的阈值做二叉分裂(例如Cart树)等,同时,单棵决策树虽简单直观,但易过拟合且“波动”大;将它们放入 Bagging 或 Boosting 框架,通过“群体智慧”有效抵消个体缺陷,不仅显著降低方差和偏差,还保留了树模型的灵活性与可用性,因而成为集成学习领域的首选。

Boosting提升算法

提升算法每次构建树预测结果都会弥补残差

举例:目标为1000,第一次针对1000预测为950,第二次则针对残差50预测为30,第三次针对残差20…

问题:那么残差预测何时结束,这么下去不是可以直接提升到目标值了吗?

答:Gradient Boosting 并不是无限制地“加树直到残差为零”,而是通过预设停止条件早停策略来平衡“拟合度”与“泛化能力”。每次新树都是在拟合前一轮残差,理论上残差可不断减小,但过度迭代会导致模型对训练集过拟合、在新数据上表现下降。因此,常用的停止标准包括:达到最大迭代次数(即最大树数)、验证集性能不再提升,在若干轮(patience)内损失无改善则提前终止(早停(后文有说到 G B D T GBDT GBDT的早停策略))、残差或整体误差低于阈值,认为已近收敛即可停止。

AdaBoosting、Xgboost
  • A d a b o o s t Adaboost Adaboost会根据前一次的分类效果调整数据权重(后文针对 A d a b o o s t Adaboost Adaboost展开)
  • 解释:如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重
  • 最终的结果:每个分类器根据自身的准确性来确定各自的权重,再合体

在机器学习中,一个分类器都叫弱分类器,多个弱分类器通过算法优化叠在在一起就有了强分类器(三个臭皮匠顶一个诸葛亮)。

image-20250428215617246

Stacking堆叠模型

  • 堆叠:很暴力,拿来一堆直接上(各种分类器都来了)。
  • 可以堆看各种各样的分类器( K N N , S V M , R F KNN,SVM,RF KNN,SVM,RF等等)。
  • 分阶段:第一阶段得出各自结果,第二阶段再用前一阶段结果训练。
  • 为了刷结果,不择手段 !

下图为up主举得堆叠模型的例子:

image-20250428220103808

问题1:堆叠模型是不是可以任意的选取分类器?数量和选取分类器类型有限制吗?

答:基学习器(第一阶段模型)的选择与数量,多样性胜过数量

  • 理想的堆叠要“错位互补”:各基模型既要都比随机猜好(比“弱”好),又要在错误上互不相关。
  • 随机森林+ S V M SVM SVM K N N KNN KNN G B D T GBDT GBDT,比 4 个随机森林堆一起更有可能提升
  • 不要过多,太多基模型,会产生非常高维的“第二阶段”特征(每个基模型一次预测就多一个维度),元模型(如逻辑回归、神经网络)反而更难训练,不一定越堆越好。一般3~8个互补的基模型比较合适。

问题2:对于回归任务和分类任务用堆叠模型选取分类器熵有不同吗?

答:

  • 分类任务:基模型输出通常是 类别概率(软预测)或 One-Hot 编码(硬预测)。

    • 推荐用概率:如三分类问题,每个模型输出 [P(A),P(B),P©][P(A),P(B),P©][P(A),P(B),P©] 三维,而不是单个标签。这样第二阶段能更细致地捕捉每个模型对各类别的“信心”差异。
  • 回归任务:基模型直接输出连续值(前向预测值),第二阶段就拿这些数值做回归即可。

共通点:第二阶段模型都要求每个基学习器的输出尺度一致——分类就都输出概率或同样的编码;回归就都输出实数。

问题3:图示的意思是拿第一次输出预测的结果100(相当于选取A类)、100(A类)、010(B类)来作为下一次的输入,那是不是输入输出的口径就得一模一样才行?

答:对于输出口径,一般都要求一致,不能一个基模型输出 One-Hot(比如 [1,0,0]),另一个只给单个标签(A),第三个给概率(0.7)。

统一做法

  • 将所有分类基模型都改为输出概率分布:如果是 3 类,每个模型都输出长度 3 的向量。
  • 或统一用硬预测标签,但这样信息量少,不推荐。

问题4:为什么第二阶段送入模型效果能够提升?

答:首先明确stacking的第一阶段在选取基学习器的时候,尽量选取的是互补的模型,那么每个模型的关注特征角度可能不一样,第二阶段的元模型拿第一阶段所有输出作为“新特征”来重新训练,从而学会“如何在不同情况下修正基模型的偏误”,第一阶段的基学习器,比如用决策树、SVM、KNN、神经网络等,每个模型输出自己的预测结果;第二阶段,元模型不直接使用原始特征,而是以第一阶段所有基学习器的输出预测(例如分类概率向量或回归预测值)作为新的特征,学习如何加权和组合这些预测,以给出最终更准确的结果。

  • 基学习器的输入:原始训练数据(特征矩阵 X X X)和真实标签 y y y

  • 元模型的输入:由每个基学习器在交叉验证或留出验证集上对样本的预测构成的新特征矩阵。若有 M M M个基学习器,且做 K K K类分类,则每个样本提供$M×K $个预测概率,或 M M M 个回归数值。

image-20250428220649280

投票策略:软投票和硬投票

  • 硬投票:直接用类别值,少数服从多数
  • 软投票:各自分类器的概率值进行加权平均(要求各分类器都能得到概率值)

问题:任何情况都是软投票靠谱吗?什么场景会使用到硬投票?

答:无论是在学术研究还是工业实践中,软投票(Soft Voting) 通常较 硬投票(Hard Voting) 更准确,但是并非所有情况都要“盲用”软投票;在模型能力、概率可靠性、计算资源等多方面权衡后,才能决定是否采用硬投票。若你需要极致精度且概率校准完备,请首选软投票;若更看重简单、高效或概率不可用,则硬投票依然是不二之选。

AdaBoost权重算法简述

A d a B o o s t AdaBoost AdaBoost,是英文"Adaptive Boosting”(自适应增强)的缩写,由 Y o a v F r e u n d Yoav Freund YoavFreund R o b e r t S c h a p i r e Robert Schapire RobertSchapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

权重分配逻辑

1、初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权重:1/N。

2、训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。然后,权重更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

3、将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着2较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

image-20250430235122998

问题:这个是一个算法策略是自适应增强,是归属于boosting(增强)类型的一种算法吗,本质上还是个树模型吗,还是说这只代表一个策略?

答:首先搞懂的是AdaBoost 本质上是什么?

  1. Boosting(提升)框架 vs. 具体弱学习器
    • Boosting 是一类 “将弱分类器串行地组合成强分类器” 的算法策略框架。
    • A d a B o o s t AdaBoost AdaBoost 是 Boosting 家族中最经典的一个具体算法,名称就含有 “Adaptive (自适应) Boosting” 的意思——它在每一轮都根据前一轮的错误率 自适应 地调整样本权重。
  2. 弱学习器可以自由选择
    • A d a B o o s t AdaBoost AdaBoost 本身并不绑定某种弱分类器:你可以把它和 决策树桩(depth=1 的极小树)、朴素贝叶斯Logistic 回归、甚至 S V M SVM SVM 等弱模型搭配,前提是弱模型能利用样本权重进行加权训练。
    • 在实践和文献里,最常用的组合是 “树桩 + A d a B o o s t AdaBoost AdaBoost,因为树桩本身非常弱且训练极快,错误率常常略低于 50%,符合 A d a B o o s t AdaBoost AdaBoost 要求。
  3. 算法核心在权重更新策略
    • 树还是树,朴素贝叶斯还是朴素贝叶斯; A d a B o o s t AdaBoost AdaBoost 只是在它们外面套了一层“权重自适应”的迭代流程,把错误多的样本越来越重,让后续弱分类器去“重点纠错”。
    • 换句话说, A d a B o o s t AdaBoost AdaBoost = “加权训练 + 加权投票” 的策略;具体训练什么模型、怎么划分特征,都是“可插拔”的。

下图是利用SVM(支持向量机来演示这个算法策略),并且展示了决策边界效果

image-20250430234719517

GBDT、Xgboost、Adaboost、LightGBM之间的关系

特性AdaBoostGBDTXGBoostLightGBM
算法类型自适应加权提升(Adaptive Boosting):逐轮训练弱分类器,根据错误率,对错分样本加大权重、对正确样本减小权重梯度提升(Gradient Boosting):把提升看作对损失函数在函数空间的梯度下降,每棵新树学习当前预测残差(负梯度)极端梯度提升( e X t r e m e G B D T eXtreme GBDT eXtremeGBDT):在 G B D T GBDT GBDT 基础上引入二阶梯度,信息、针对矩形数据块做并行分裂、在目标中增加 L 1 / L 2 L1/L2 L1/L2 正则化项等梯度提升( G B D T GBDT GBDT)优化实现:①叶子优先生长:优先扩展增益最大的叶子,加快收敛;②直方图分箱:特征自动离散化,减少计算与内存;③ G O S S GOSS GOSS(保留大梯度样本、抽样小梯度样本)与 E F B EFB EFB(特征互斥打包)来降低数据规模
公式基础指数损失最优化:$min⁡∑_iexp⁡(−y_iF(x_i))\min\sum_i \exp(-y_iF(x_i)) $梯度下降思想:每棵树拟合负梯度残差二阶泰勒展开 + 梯度 + 二阶梯度拟合。 G B D T GBDT GBDT,但引入但引入 G O S S GOSS GOSS E F B EFB EFB、直方图算法
关注点样本权重动态调整,强调“难分样本”任意可微损失函数的负梯度拟合训练速度与正则化优化大规模数据下的速度与内存优化
样本权重调整每轮对错分样本加权不调整样本,通过残差自动聚焦 G B D T GBDT GBDT G B D T GBDT GBDT
正则化无显式正则化项无显式正则化树叶权重的 L 1 / L 2 L1/L2 L1/L2 正则化通过 G O S S / E F B GOSS/EFB GOSS/EFB 减少过拟合
并行化与加速单机串行部分并行(需自行实现)支持多线程、列并行、块结构加速叶子优先生长、直方图、样本/特征抽样
对噪声/离群点敏感中等(若弱分类器过强则易过拟合)中等(依赖损失函数性质)低(正则化 + 二阶信息)更低(复杂度控制 + 抽样策略)
典型应用场景小规模数据、基学习器类型多样时任意可微损失下的回归或分类大规模表格型数据竞赛、商业应用海量数据、实时系统、深度特征交互

早停策略

1. 早停策略定义与指标

  1. 早停(Early Stopping)原理
    • 在训练过程中,除了使用训练集外,还要指定一个验证集(validation set),每完成一次迭代(一次树的训练或一次 epoch),都会在验证集上计算损失(loss)或其他评价指标(如 AUC、精度)lightgbm.readthedocs.io
    • 当验证指标在连续 stopping_rounds(或称 patience)次迭代内没有显著改善(提升幅度低于 min_delta)时,就停止训练,认为模型已“学到头” lightgbm.readthedocs.io
    • 常见的停止条件:验证集的 loss 最小值后连续 X 轮未再下降,或验证集的准确率达到峰值后连续 X 轮未再上升
  2. 最佳迭代次数(best_iteration)
    • 这是验证集指标达到最优(loss 最小或指定评估指标最大)的那一次迭代编号。例如,当验证 loss 在第 23 轮达到最低,就记为 best_iteration = 23 MachineLearningMastery.com
    • 在许多实现中(如 XGBoost 的 sklearn 接口、LightGBM 的 R/Python 接口),会自动记录并切换到这一最佳迭代,以供后续预测使用 XGBoost 文档lightgbm.readthedocs.io

2. 最佳迭代次数的用途

  1. 防止过拟合
    • 验证集对应的最优点通常是偏差–方差折中(bias–variance tradeoff)的最佳点,继续训练可能开始对训练集噪声过度拟合。
  2. 确定 n_estimators 参数
    • 在后续重训练或超参数报告中,可将 n_estimators 直接设置为 best_iteration,避免手动调试。
  3. 模型监控与诊断
    • 通过 best_iteration 分析学习率(learning rate)是否设置合理:若 best_iteration 很小,可能学习率过大;若很大且接近最大迭代数,可能学习率过低或模型欠拟合。

3. 保存与恢复最佳模型

针对不同框架,有两种常见做法:

3.1 “在线”回退(In‐Place Restore)
  • XGBoost(sklearn/R 接口) 默认会在预测时使用最佳迭代:调用 model.predict(X) 时,它会自动应用 best_iteration,即只用前 best_iteration 棵树 XGBoost 文档
  • LightGBM 也会在 predict() 时根据 best_iteration 截断树:只保留最优轮次前的模型结构来预测 lightgbm.readthedocs.io
3.2 手动保存与重训练
  1. 直接保存“带有best_iteration”的模型文件

    • 使用 model.save_model('model.txt')(XGBoost)或 model.booster_.save_model('model.txt')(LightGBM)即可将当前训练状态(包括 best_iteration)写入文件 Stack Overflow
  2. 重新以最优轮次训练

    • 如果想要彻底剔除那些过拟合的后续轮次,可以在训练时先不启用早停,待训练结束后读取 best_iteration,然后重新运行一次训练:

      python复制编辑model = XGBRegressor(n_estimators=best_iteration, random_state=seed, ...)
      model.fit(X_train, y_train)
      
    • 此时若想严格复现前次训练过程,需要确保所有随机种子(random_state/seed)和数据抽样设置都一致,否则第 t 棵树的分裂可能改变,整体结果会有所差异 GitHubXGBoosting


4. 与随机种子和样本抽取的关系

  • 固定随机种子
    • 为了确保重训练时的结果与原训练前 best_iteration 前的一致,必须指定相同的随机种子给所有影响随机性的组件,包括模型参数(random_state)、数据分割、bootstrap 抽样等 GitHub
  • 增量训练 vs. 重训练
    • “在线”回退不会改变训练过程,仅在预测时截断超出的树,因而不用担心随机性;
    • 而“重训练”则会重新从头执行所有迭代,若不固定种子或模型内部的随机配置(如 LightGBM 的 bagging_fractionfeature_fraction),则重训练结果会有微小出入。

小结

  • 早停策略:监控验证集指标,连续若干轮无改善即停,最佳迭代为验证性能最优处的编号 MLJAR
  • 最佳迭代次数 可用于设置 n_estimators、防过拟合、模型监控。
  • 模型保存:可在线恢复(predict 时自动截断)或手动重训练(需固定随机种子以复现结果)。
  • 随机性控制:若要精确复训并完全重现“最佳状态”,务必统一随机种子与抽样设置。
GBDT的早停止策略

通过error_going_up变量记录回弹次数,通过min_val_error记录最小loss值,回弹次数达到限定次数(5次)取最新的min_val_error所在迭代次数为最佳迭代次数。(sklearn当中的 G B D T GBDT GBDT没有这个策略, l i g h t g b m 包 lightgbm包 lightgbm x g b o o s t 包 xgboost包 xgboost就有)

Xgboost的梯度提升的目标函数

Obj代表了当我们指定一个树的结构的时候,我们在目标上面最多减少多少。我们可以把它叫做结构分数(structure score)。你可以认为这个就是类似吉尼系数一样更加一般的对于树结构进行打分的函数。下面是一个具体的打分函数计算的例子

image-20250429164424648

对于每次扩展,我们还是要枚举所有可能的分割方案,如何高效地枚举所有的分割呢?我假设我们要枚举所有 x < a x<a x<a这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。

image-20250429164853156

这样就解释了 X g b o o s t Xgboost Xgboost在梯度提升算法中的是如何通过计算子树的每次分裂增益值来控制分裂。

(推导过程复杂,简单理解即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值