一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于动态抽样的梯度提升决策树模型构建优化方法与流程

2021-10-24 04:25:00 来源:中国专利 TAG:梯度 抽样 构建 模型 提升


1.本发明涉及大数据技术领域,尤其涉及基于动态抽样的梯度提升决策树模型构建优化方法。


背景技术:

2.规模日益庞大的数据集为高效开展挖掘工作带来巨大挑战。梯度提升决策树(gradient boosting decision tree,gbdt)由于高效、易解释、预测能力强等特点被广泛应用于机器学习与数据挖掘任务。为了进一步增强gbdt模型的可扩展性、加速模型学习过程,现有的gbdt工具均采用有放回抽样作为行抽样策略达到减小数据规模的目的;并利用简单随机抽样作为特征抽样方法以减小gbdt模型构建时的搜索空间。对此,chernoff/hoeffding界常用来为抽样方案估计构建模型所需的样本量,但该方法容易过高估计所需样本量。上述的列抽样方法在选择特征样本子集时未考虑任何先验信息,存在无法选取具有足够代表性的特征入样问题。
3.动态抽样技术由于参数配置简单、能够更加精确的估计样本量等特点为改进gbdt行抽样中存在的上述问题提供了可行的解决方案;此外,通过利用gbdt模型构建时生成的“特征重要性”信息,为改进gbdt中特征抽样算法提供了可用的先验信息。
4.目前现有的面向提升算法的基于样本权重的抽样技术不完全适用于gbdt。对此,lightgbm提出一个新的基于梯度的单侧抽样技术(gradient

based one side sampling,goss),根据gbdt信息增益的定义,样本实例的梯度值与该实例对模型输出的贡献程度成正比。goss基于这一点通过剔除部分对模型损失影响较小的样本来进行抽样。实验证明了在同样的抽样比下,基于goss得到的样本模型准确性高于均匀随机抽样。lightgbm将抽样率作为用户参数来确定抽样算法抽取的样本大小,但由于合适的样本大小往往难以确定,用户常常基于直觉配置参数。对此,数据挖掘领域的静态抽样方案设计中常常使用chernoff界、hoeffding界来估计样本大小,虽然解决了需要对样本量参数进行配置的问题,但由于没有与挖掘工具结合起来,不能较为准确的反应模型训练所需的样本量,在实际应用中,常常导致抽取过多不必要的数据样本。


技术实现要素:

5.本发明的目的在于提供基于动态抽样的梯度提升决策树模型构建优化方法,提供将应用基于massart不等式的动态抽样技术构建gbdt模型以进一步加速训练过程,在保证模型准确性的前提下使用更少的样本量来构建模型,基于gbdt的特征贡献指标设计并实现特征抽样算法,减小模型构建过程中所需搜索的空间,可以解决背景技术中的问题。
6.为了解决上述技术问题,本发明提供的基于动态抽样的梯度提升决策树模型构建优化方法的技术方案具体如下:
7.本发明实施例公开了基于动态抽样的梯度提升决策树模型构建优化方法,包括以下步骤:
8.将动态抽样应用于提升算法中;
9.对面向树提升算法进行特征抽样;
10.确定面向提升算法的动态抽样策略。
11.在上述任一方案中优选的是,动态抽样的算法执行流程包括以下步骤:
12.根据当前对p的估计来确定是否获取到足够样本;
13.m用于统计迄今为止满足b(x)=1的样本数量,n用于统计迄今为止所有样本数量;
14.动态抽样算法持续执行抽样,直到当前样本集合中包含满足b(x)=1的样本数量超过a为止,a依赖于预设的准确性参数和可靠性参数,在较为复杂的抽样方案中,a的大小也取决于
15.在上述任一方案中优选的是,所述对面向树提升算法进行特征抽样包括:
16.基于奇异值分解的抽样,利用特征重要性分数,根据各个特征对应分数的占比来对特征进行不等概率抽样,具体抽样方法包括以下步骤:
17.对矩阵a进行分解,在一组列上构造一个非均匀的重要性抽样分布,依据该概率分布模型对特征进行抽样;
18.另为一个由n个实例和d个特征构成的数据矩阵,且当n<<d时,该矩阵的秩满足r:=rank(a)≤n,并对a进行奇异值分解,即另a=u∑v
t
,其中表示包含了右奇异向量的集合;
[0019][0020]
其中,v
i
(j)表示第i个右奇异向量的第j个值。
[0021]
在上述任一方案中优选的是,所述确定面向提升算法的动态抽样策略包括:
[0022]
lightgbm算法库,其用于根据内部的模块并提供不同的服务,具体分为三大层:应用程序接口层、核心算法层、基础服务层,上层模块中的算法包依赖下层模块算法包提供的服务,其中,核心算法层中算法模块的运行均依赖下层提供的与通信、文件操作相关的基础服务,应用程序接口定义与用户的交互模式,向外提供访问接口,算法逻辑的执行依赖于下层实现;
[0023]
基于massart不等式的动态抽样,其抽样计算公式为:基于massart不等式的动态抽样,其抽样计算公式为:另p=e[x],为伯努利变量x的期望,另为n重伯努利试验成功的相对频率,对于任意的0<z≤p,满足关系:对于任意的p<z≤1,满足关系:
[0024]
基于动态抽样的gbm实现,将p
h,s
的初始值设置为0.5,用以计算第一轮迭代时所需抽取的样本大小,后续迭代使用前一轮迭代的预测准确率计算样本大小;
[0025]
adagbdt是将上述技术实现到lightgbm中得到的一种梯度提升树算法,adagbdt多
线程优化,是为了进一步提高动态抽样算法的执行效率,进行了多线程优化,通过将数据实例划分为多个子集并分配给不同线程以实现抽样过程的并发执行优化。
[0026]
根据参数中抽样率按比例计算计算当前线程提取的样本大小,针对当前线程所需处理的索引区间进行抽样,将未/入样的数据索引写入预分配的全局临时索引缓冲区tmp_indices_buf,其中,入样数据的索引值从每个线程操作的内存区域的起始位置开始连续写入,未入样数据的索引值紧接存储入样数据索引的内存单元写入。
[0027]
在上述任一方案中优选的是,lightgbm算法库包括三个参数,分别为:
[0028]
第一参数featimportances用于存储所有特征于模型贡献的向量;
[0029]
第二参数validfeatindices用于存储特征实际索引为的向量,该向量的大小和featimportances具有相同的大小;
[0030]
第三参数为需要入样的特征个数。
[0031]
在上述任一方案中优选的是,还包括计算需要保留的具有高贡献量的特征个数,其中p由用户参数remain_feature_fraction指定,根据所有特征的贡献量按降序排序,返回排序完成后的特征实际索引位置。
[0032]
在上述任一方案中优选的是,还包括计算在剩余未入样的特征中进行简单随机抽样的样本量,将特征贡献量在前importantfeatnum位的特征的实际索引存储到结果向量中,从剩余的所有特征中抽取samplingnum个特征,将贡献量靠前的importantfeatnum个特征的特征索引与随机抽样得到的samplingnum个特征的特征索引合并,存储到结果向量中,最后返回给上一层模型训练使用。
[0033]
在上述任一方案中优选的是,所述lightgbm算法库包括gbdt模型训练流程,其具体包括:
[0034]
参数加载,用于读取配置参数信息并加载到内存中,包括读取训练数据所在文件路径、模型训练的迭代次数、学习任务的类型、抽样比例、模型评价指标、模型输出路径信息,lightgbm根据参数来初始化目标函数对象和决策树模型、并指导gbdt模型构建按需有序的执行;
[0035]
资源初始化,用于根据第一步加载的数据信息和参数信息,对后续训练过程中需要用到资源进行分配,包括创建并初始化用于计算梯度的boosting运算库、根据输入数据的文件路径加载训练数据、根据参数信息中的任务类型进行目标函数库的创建及初始化;
[0036]
计算梯度,用于计算优化目标函数所需的损失函数的一阶导数和二阶导数;
[0037]
行抽样,若用户设置了adagbdt抽样参数,将对训练数据执行动态抽样过程;否则,根据用户设置的抽样率bagging_fraction执行自助式抽样算法;
[0038]
特征抽样,根据输入参数中的特征抽样率feature_fraction的值计算需要抽取的特征样本大小,然后利用公式max(#feature*feature_fraction*0.5,1)计算要保留的重要特征个数important_feat_num和随机抽样的特征个数sampling_num;获取各个特征的从第一轮迭代到当前迭代的模型贡献量之和,并根据各个特征贡献量的大小进行排序,将贡献量最大的important_feat_num个特征纳入特征样本集合,在剩余特征中进行均匀随机抽样,将抽取得到的sampling_num个特征添加到特征样本集合中供下一步使用;
[0039]
构建决策树,用于重置之上一轮训练迭代中树模型中存储的直方图信息,并根据用户设置的特征抽样率参数执行均匀随机抽样;根据抽样后的特征集合和其对应的直方图
信息,根据计算的一阶导数和二阶导数寻找当前树节点最佳分割点,直至当前叶子上的数据量小于预设阈值决策树构建完毕;
[0040]
添加树模型,用于将构建的决策树模型添加到当前gbdt模型中,同时对叶子节点输出分数进行更新。
[0041]
在上述任一方案中优选的是,所述lightgbm算法库包括efb算法,其用于识别互斥特征并将其合并到同一bundle中,在实现上采用无向图来对特征之间的关系进行描述,efb识别互斥特征的过程如下:
[0042]
第一步,构造具有加权边的图模型,每个特征对应一个顶点,为每两个不互斥的特征之间加入一条边,权重表示顶点的度数;
[0043]
第二步,根据图中顶点的度数对特征进行降序排序,度数越高,表示与其它特征同时取非零值的可能性越高,即越可能与其它特征发生冲突;
[0044]
第三步,创建空的bundle存储互斥特征,检查已排序的特征列表,如果该特征与已存在的bundle中的特征互斥,则将特征分配给该bundle;如果该特征与已经存在的所有bundle中的特征均发生冲突,则创建一个新的bundle,将该特征分配到这个新的bundle中。
[0045]
本发明与现有技术相比,具有如下有益效果:
[0046]
提供将应用基于massart不等式的动态抽样技术构建gbdt模型以进一步加速训练过程,在保证模型准确性的前提下使用更少的样本量来构建模型,基于gbdt的特征贡献指标设计并实现特征抽样算法,减小模型构建过程中所需搜索的空间。
附图说明
[0047]
附图用于对本发明的进一步理解,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0048]
图1是按照本发明基于动态抽样的梯度提升决策树模型构建优化方法示意图。
[0049]
图2是按照本发明基于动态抽样的梯度提升决策树模型构建优化方法中的lightgbm算法模块示意图。
[0050]
图3是按照本发明基于动态抽样的梯度提升决策树模型构建优化方法中的lightgbm模型训练流程示意图。
具体实施方式
[0051]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0052]
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0053]
为了更好地理解上述技术方案,下面将结合说明书附图及具体实施方式对本发明技术方案进行详细说明。
[0054]
实施例:
[0055]
在本发明实施例所述的基于动态抽样的梯度提升决策树模型构建优化方法中,梯度提升决策树又称为mart树(multiple additive regression tree),是一种基于决策树的集成学习算法模型。gbdt基于boosting学习框架通过将构建得到的所有决策树的结论进行累加得到模型的结论。在实验环境与实际应用中,gbdt为分类、回归、排序等学习任务提供了高可靠的、可解释的解决方案。该模型继承了boosting算法与树算法二者的特性,总体来说具有包含以下几点:
[0056]
(1)简单
[0057]
gbdt在每一轮迭代对决策树模型进行拟合,与支持向量机(svm)和神经网络(nn)相比没有过多复杂的参数。在最简单的应用场景中,用户仅需调节学习率、需要构建树模型的数量即可得到一个较优的模型。
[0058]
(2)学习能力强
[0059]
该特点主要继承于boosting方法,boosting方法采用了基于任意拟合标准的加法模型作为学习的目标,同时采用决策树作为基学习器进一步增强了学习能力。具体来说,支持回归任务中使用的平方损失,最小绝对偏差损失,huber

m损失;分类任务中的logistic回归;搜索排序中的lambdarank等;这使得gbdt能够被用于分类、回归、搜索排序等各种机器学习任务中。
[0060]
(3)预测能力强
[0061]
相比svm,gbdt在调节较少参数的情况下也能够达到较高的预测准确率,合理设置学习率并结合使用bagging、特征抽样等方法能进一步提高其预测准确率与模型泛化能力。
[0062]
(4)易解释
[0063]
gbdt由一系列树模型组成,而决策树简单直接的结构(可视为if

then规则集合)符合人类直观思维,更易于人们理解。
[0064]
(5)可扩展性差
[0065]
由于boosting算法需要以迭代的方式指导模型训练,导致基学习器之间存在依赖关系所带来的限制,这种学习方式导致算法本身难于进行并行优化。
[0066]
(6)时间空间消耗大
[0067]
在构建决策树模型的过程中,分裂树节点需要消耗较多的时间和较大的内存资源以完成数据的排序操作。
[0068]
综上所述,由于gbdt本身具备可解释、简单、学习能力强等许多优秀特性,自提出以来便受到广泛关注。在实验环境中,lightgbm相比现有的gbdt工具达到了最佳性能表现。对此,本发明基于lightgbm算法库对提出的面向梯度提升决策树的动态抽样策略和特征抽样策略进行分析验证,并采用lightgbm内部默认gbdt算法实现作为实验基线设计对比实验。
[0069]
gbdt具体内容如下:
[0070]
(1)利用梯度下降法学习模型参数
[0071]
给定一个大小为n的训练样本集需要找到一个映射函数f
*
(x),使得该函数在所有(y,x)对构成的联合概率分布下,指定的损失函数l(y,f(x))的值的期望最小。通常,在实际应用中通过选择一个参数化模型f(x;p)将上述函数优化问题转换为如公式(2

1)所示的参数优化问题:
[0072][0073]
在优化f(x;p)和l时,常常采用加和的形式来表示待求解参数:
[0074][0075]
其中p0是初步猜测的值,是由特定优化方法定义的后续每一步需要累加增量。常见的梯度下降数值优化方法的数学模型基于如公式(2

2)所示的参数求解形式发展而来,梯度下降法是最为简单的且被广泛使用的数据最小化方法之一,它将进行了如下定义:
[0076][0077]
对于每一步,计算:
[0078]
p
m


ρ
m
g
m
.
ꢀꢀꢀ
(2

4)
[0079]
其中,负梯度值

g
m
表示下降方向,ρ
m
是它的系数。
[0080]
(2)学习过程的优化
[0081]
当处于数据集样本有限的情形下,机器学习中的boosting方法利用了一种阶段性贪心求解的方式来对参数进行优化,主要通过借助附近的样本点引入平滑性。该方法的形式化表述如公式(2

5)和公式(2

6)所示:
[0082][0083]
其中,m=1,2,

,m,并且对于f,有:
[0084]
f
m
(x)=f
m
‑1(x) β
m
h(x
i
;a)
ꢀꢀꢀ
(2

6)
[0085]
函数h(x
i
;a)为“弱学习器”或“基学习器”,对于gbdt而言,它表示一颗决策树。
[0086]
在第m个迭代阶段给定了目标函数的近似解f
m
‑1(x),公式(2

5)和公式(2

6)中的函数β
m
h(x;a)代表该近似解朝(2

1)中的最优解f
*
(x)逐渐逼近的优化方向,并将表示优化方向的函数h(x;a)视作数据样本有限情形下的梯度下降求解步骤,即在n维数据空间中,h(x;a)与

g
m
(x)在同一数据分布下高度相关。其中的参数可通过公式(2

7)求解:
[0087][0088]
在每一个迭代阶段,更新下式使其逐渐逼近目标函数:
[0089]
f
m
(x)=f
m
‑1(x) h(x;a
m
)
ꢀꢀꢀ
(2

8)
[0090]
经过公式(2

6)和公式(2

7)两步,将公式(2

5)所示的求解复杂的最小化问题转换为公式(2

7)求最小二乘解的问题。由此,对于任意存在最小二乘求解算法的h(x;a),可
以利用该方法以及前项分步加法模型最小化任意一个损失函数l(y,f)。对应的使用了梯度下降法的伪代码算法1所示:
[0091]
算法1梯度提升学习过程
[0092][0093][0094]
从学习gbdt模型的角度出发,上述算法将梯度下降法与boosting方法的加法模型相联系,并采用决策树作为每个迭代步的基学习器,通过不断迭代优化构建得到最终模型。具体过程如下:第5步,利用梯度下降最优化方法,求解损失函数梯度值,作为目标函数下一步优化的方向;第6步,通过拟合上一步的梯度值,构造一颗决策树模型h(x;a);第7步,朝着模型优化方向进行线性搜索,利用损失函数习得最优参数ρ
m
;第8步,根据学习到的最优参数更新当前模型,即将当前迭代习得的树模型添加到gbdt模型中。对上述过程进行多轮迭代优化,得到最终梯度提升决策树模型。
[0095]
为了对gbdt模型学习过程进行进一步优化,利用泰勒二阶展开式对其进行了扩展,使得求解目标函数只依赖于损失函数的一阶导数和二阶导数,为目标函数的求解过程提供了统一的方式。xgboost和lightgbm目前的学习性能较大程度优于现存的其他gbdt工具包。
[0096]
为了进一步提高gbdt的学习性能,分布式梯度提升算法库xgboost,基于梯度提升框架实现高效、灵活的机器学习算法。其在内部实现了一种并行梯度树提升算法,使得gbdt模型能够应用于回归、二分类、多分类、搜索排序等多种学习任务场景;此外,为目标函数进入了一个无需额外剪枝操作的简单且易于并行优化的正则项,进一步加速了学习过程。具体内容如下所述:
[0097]
对于一个给定的大小为n的数据集xgboost对
目标函数的定义如公式(2

9)所示:
[0098][0099]
其中,l表示损失函数,ω为表示模型复杂度的正则项,表示由树模型构成的函数空间,k为构建的树模型的数量。提升树模型采用加法模型作为算法模型,第t轮迭代学习的树模型的数学描述如下:
[0100][0101]
根据上式,模型训练到第t轮迭代时目标函数表示为:
[0102][0103]
xgboost求解目标函数时候引入了二阶泰勒展开式对目标函数近似求解:
[0104][0105]
取δx=f
t
(x
i
),则目标函数重写为:
[0106][0107]
其中,g
i
和h
i
分别为损失函数l的一阶导数和二阶导数:
[0108][0109][0110]
忽略所有的常量因子,上面的目标函数简化为公式(2

11)所示形式:
[0111][0112]
上式即为每一轮迭代构建新的树模型时的优化目标。该定义所具备的一个重要优点是目标函数的取值只依赖于损失函数的一阶导数g
i
和二阶导数h
i
,该定义也为用户自定义损失函数奠定了理论上的支持,即对不同损失函数进行优化时,仅需提供获取其一阶导数和二阶导数的接口即可。
[0113]
为了惩罚结构复杂的树模型避免模型过拟,xgboost提供了自己的关于正则项的定义。树模型的定义:f
t
(x)=ω
q(x)
,ω∈r
d

{1,2,

,t},其中q为结构函数,可以将输入映射为叶子的索引号;ω表示所在叶子的预测分数;t为树模型的叶子个数。根据上述内容,xgboost对正则项进行如下定义:
[0114][0115]
其中,ω
j
个表示第j个叶子的权重,γ和λ分别是叶子节点个数与叶子输出的系数。把损失函数与正则项结合起来,得到的目标函数如公式(2

12)所示:
[0116][0117]
其中,i
j
表示第j个叶子上所有数据实例构成的集合,通过最小化目标函数有:
[0118][0119]
根据上述内容,当对一个树节点进行分裂时,带来的增益如公式(2

13):
[0120][0121]
其中,g
l
和g
r
代表节点分裂后左、右叶子节点上的数据实例的一阶导数之和;h
l
和h
r
代表节点分裂后左、右叶子节点上的数据实例的二阶导数之和;γ代表节点分裂产生的新叶子节点引入的树结构的复杂度。寻找最佳分裂点时,根据公式(2

13),对特征执行排序操作后,从左到右对已排序的特征值完成一次扫描便能计算出最佳分裂点。
[0122]
利用cpu的多线程进行并行计算,同时在算法上加以改进提高了精度;提出了一种稀疏感知的寻找最佳分裂点的算法,该算法适用于输入中存在较多0值、缺失值和独热编码的所有数据稀疏模式,且计算复杂度仅随输入中非缺失项的数量呈线性增长。
[0123]
基于上述优化工作,在实验环境中,xgboost中gbdt模型在模型训练耗时上相比scikit

learn中gbdt算法达到10倍的性能提升。
[0124]
goss(gradient

based one

side sampling),在adaboost中,样本权重是表征数据实例重要性的一个很好的指标。但是,在gbdt中,没有现成的权重可以被用来指导抽样方法的设计。但每个数据实例的梯度可以为抽样提供有用的信息,如果与一个实例相关联的梯度值较小,则代表该样本已经过良好的训练,具有较小的样本误差。基于这一点,lightgbm开发者们提出了基于梯度的抽样技术goss。
[0125]
goss在每一轮迭代过程中,会保留所有具有大梯度值的样本实例,然后在剩余梯度值较小的样本实例中执行随机抽样。使用该方式进行抽样需要用户提供两个参数:top_rate,other_rate。具体的实现方式是在抽样之前根据样本的梯度值降序排序,将前#data*top_rate个样本纳入待训练样本集合,在余下数据中进行随机抽样,抽取#data*other_rate个样本加入待训练样本集合,最后,在最终样本集合上训练模型。
[0126]
efb(exclusive feature bundling),在真实应用环境下,大部分数据具有较为庞大的特征空间,且特征空间通常十分稀疏。在稀疏的特征空间中,许多特征同时为非零的几
率很小,如经过独热编码的特征;lightgbm把不同时取非零值的多个特征称为互斥特征,在分裂树节点时,这些互斥的特征可以看作一个特征来进行划分。为此,lightgbm中设计了一个有效的算法efb,用于识别互斥特征并将其合并到同一bundle中,在实现上采用无向图来对特征之间的关系进行描述,efb识别互斥特征的过程如下:
[0127]
第一步,构造具有加权边的图模型,每个特征对应一个顶点,为每两个不互斥的特征之间加入一条边,权重表示顶点的度数。
[0128]
第二步,根据图中顶点的度数对特征进行降序排序,度数越高,表示与其它特征同时取非零值的可能性越高,即越可能与其它特征发生冲突。
[0129]
第三步,创建空的bundle存储互斥特征,检查已排序的特征列表,如果该特征与已存在的bundle中的特征互斥,则将特征分配给该bundle;如果该特征与已经存在的所有bundle中的特征均发生冲突,则创建一个新的bundle,将该特征分配到这个新的bundle中。
[0130]
优化速度与内存资源占用:
[0131]
使用基于直方图的方法分裂树节点,并在此基础上,利用直方图做差进一步加速训练过程,这一步主要通过使用父节点与其子节点的直方图相减直接计算另一个子节点的直方图的方式实现。由于训练数据的存储方式从存储连续型数据转换为分箱存储于离散的且字节数占用更小的bin中,进一步降低了训练数据使用的内存空间。
[0132]
优化分类特征的编码方式:
[0133]
独热编码是目前常用的分类特征表征方式,但对于树学习器而言,该方法是次优的。原因在于当特征具有较多类别时容易构建出不平衡的树模型,导致需要学习较深的树以实现满足需要的精度。
[0134]
除了独热编码,最佳的解决方法是通过将所有类别划分为两个子集后在其上进行再次划分。假设特征有k个分类值,则存在2
(k

1)

1种可能的划分。但是对于回归树而言,存在一个更高效的解决方案。该方法寻找最佳分裂点的时间复杂度为o(k*log(k))。在每一次分裂过程中,根据训练目标对分类值进行排序。根据直方图中的数据样本梯度的累加值对直方图进行排序,然后在已排序的直方图上中寻找最佳分裂点。
[0135]
lightgbm提供了3种并行学习算法。包括基于数据并行的树学习算法、基于特征并行的树学习算法和基于投票机制的树学习算法。
[0136]
综上,lightgbm旨在提供一个具有更低内存占用、更高通信效率、更短模型计算时间、支持大规模并行训练的梯度树提升工具。实验表明lightgbm相比xgboost模型训练更加高效且占用更少的内存空间。
[0137]
如图2所示,根据内部各个模块提供服务的不同分为三大层:应用程序接口层、核心算法层、基础服务层。上层模块中的算法包依赖下层模块算法包提供的服务。其中,核心算法层中算法模块的运行均依赖下层提供的与通信、文件操作相关的基础服务。应用程序接口定义与用户的交互模式,向外提供访问接口,算法逻辑的执行依赖于下层实现。
[0138]
下面对lightgbm模块图中的各个算法包所涵盖的功能服务进行介绍:
[0139]
io包:
[0140]
对gbdt模型构建所需的数据结构的定义与实现。包括构建特征直方图时使用的用于分箱存储特征值的bin;用来读取数据集的数据加载器和用来解析输入数据的解析器;用来读取和解析配置信息的配置管理器;以及分裂树节点时用于描述划分逻辑的tree等频繁
访问的特殊数据结构。
[0141]
网络通信包:
[0142]
提供了由lightgbm定义并实现的用于gbdt分布式并行训练的mpi通信接口。
[0143]
工具包:
[0144]
提供频繁使用的如日志记录、随机数生成、字符串操作等公共工具集。
[0145]
metric包:
[0146]
提供用于度量二分类、多类分类、搜索排序等应用于多种不同机器学习任务的模型评价算法。
[0147]
目标函数包:
[0148]
lightgbm目标函数包中提供了各种机器学习任务所用到的可二阶求导的损失函数,每个损失函数都实现了公共接口求解各自的一阶导数、二阶导数,并将结果返回供外界访问。用户只需要实现这个接口便能添加自定义的损失函数。
[0149]
决策树算法模型包:
[0150]
提供了不同类型的决策树模型训练过程的实现;包括单机模式中的树模型训练过程、支持数据并行的决策树构建过程、支持特征并行的决策树构建过程。
[0151]
提升算法包:
[0152]
该算法包对常规gbdt的模型训练过程进行了实现;此外,lightgbm对常规gbdt训练过程进行扩展,即为模型训练加入了第二章提到的基于梯度的单侧抽样技术goss。goss相比常规gbdt模型的构建过程仅在行抽样的逻辑上存在差异,所以lightgbm在实现goss时仅仅对定义了行抽样逻辑的bagging方法进行了重写。该算法包的树模型构建过程依赖于决策树算法模型包的实现;提升优化过程依赖于目标函数包的实现;训练过程中的模型评价依赖于metric包的实现。
[0153]
为了给gbdt模型训练过程添加动态抽样逻辑,需要在lightgbm中添加自定义算法组件。这涉及对lightgbm模块的两部分实现进行修改:(1)添加启用自定义组件的用户配置参数;(2)将自定义组件添加在提升算法包下。通过对lightgbm中的参数配置项boosting_type添加了新的取值adagbdt,为动态抽样算法提供外部参数配置项,并增加两个新的参数项error,confidence;动态抽样算法的添加与goss的实现方式类似,将adagbdt定义并实现在提升算法包中,并重写其中bagging方法达到将动态抽样逻辑添加到常规训练过程的目的。
[0154]
lightgbm中gbdt模型训练流程:
[0155]
如图3所述,lightgbm在构建模型时其一轮迭代的训练过程完成的主要操作。lightgbm自己的特征抽样逻辑实现在了决策树模型的构建阶段,但是由于无法直接访问到特征贡献量。每一步的操作描述如下:
[0156]
(1)参数加载
[0157]
读取配置参数信息并加载到内存中。包括读取训练数据所在文件路径、模型训练的迭代次数、学习任务的类型、抽样比例、模型评价指标、模型输出路径等信息。lightgbm依赖于这些参数来初始化目标函数对象和决策树模型、并指导gbdt模型构建按需有序的执行。
[0158]
(2)资源初始化
[0159]
根据第一步加载的数据信息和参数信息,对后续训练过程中需要用到资源进行分配,包括创建并初始化用于计算梯度的boosting运算库、根据输入数据的文件路径加载训练数据、根据参数信息中的任务类型进行目标函数库的创建及初始化。
[0160]
(3)计算梯度
[0161]
计算优化目标函数所需的损失函数的一阶导数和二阶导数。
[0162]
(4)行抽样
[0163]
如果用户设置了adagbdt抽样参数,将对训练数据执行动态抽样过程;否则,根据用户设置的抽样率bagging_fraction(如果不是1的话)执行自助式抽样算法。
[0164]
(5)特征抽样。
[0165]
根据输入参数中的特征抽样率feature_fraction的值计算需要抽取的特征样本大小,然后利用公式max(#feature*feature_fraction*0.5,1)计算要保留的重要特征个数important_feat_num和随机抽样的特征个数sampling_num;获取各个特征的从第一轮迭代到当前迭代的模型贡献量之和,并根据各个特征贡献量的大小进行排序,将贡献量最大的important_feat_num个特征纳入特征样本集合,在剩余特征中进行均匀随机抽样,将抽取得到的sampling_num个特征添加到特征样本集合中供下一步使用。
[0166]
(6)构建决策树
[0167]
重置之上一轮训练迭代中树模型中存储的直方图信息,并根据用户设置的特征抽样率参数(默认不抽样)执行均匀随机抽样;根据抽样后的特征集合和其对应的直方图信息,根据第(3)步中计算的一阶导数和二阶导数寻找当前树节点最佳分割点,直至当前叶子上的数据量小于预设阈值决策树构建完毕。
[0168]
(7)添加树模型
[0169]
这一步将最新构建的决策树模型添加到当前gbdt模型中,同时对叶子节点输出分数进行更新。
[0170]
以上仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜