APP下载

一种深度梯度提升回归预测模型

2020-09-09曲文龙陈笑屹李一漪汪慎文

计算机应用与软件 2020年9期
关键词:隐层梯度深度

曲文龙 陈笑屹 李一漪 汪慎文,2

1(河北地质大学信息工程学院 河北 石家庄 050031)2(中国科学院自动化研究所 北京 100190)

0 引 言

回归模型是通过对统计关系的定量描述,以实测和统计为依据,确定各相关变量间的拟合关系的一种数学模型[1]。回归问题是机器学习主要应用方向之一,Friedman[2]指出回归问题实际上是函数空间的优化问题,目的是求出因变量关于自变量的函数,使损失函数的期望最小。回归预测广泛应用于国民经济与社会生产等领域。

统计学习理论是一种研究小样本机器学习规律的理论,它从实际出发,提取数据特征,构建概率统计模型进行数据的分析与预测[3]。在统计学习的建模过程中,建立输入变量与输出变量之间的函数关系,最常见的统计学习模型基于线性回归模型,这类方法原理简单,便于操作,但是十分依赖于以往经验,针对复杂问题容易发生精度偏差[4]。机器学习是人工智能的重要组成部分,传统机器学习回归方法有支持向量机回归[6-7]、神经网络回归[8-9]和贝叶斯回归[10]等,目前已应用于疾病预测、环境监测和股票预测[11]等各个领域。然而这些单一方法存在局限性且稳定性较差、精度不高,无法应对大数据量的精准分析等。集成学习通过整合多个学习器来完成学习任务,以降低泛化误差。其优势在于将多个个体学习器合并,得到更加合理的边界,以降低整体的错误率、提高模型性能[12]。集成学习的方法分为Bagging[13]、Boosting[14]和Stacking[15]三类,其代表算法有随机森林[16]、GBDT[17]和XGBoost[18]等。

传统的浅层学习模型对特征的依赖性强,表达能力有限。深度学习算法对于复杂问题具有更强的处理能力,它的成功主要依赖于深度结构,通过多层级联结构将原始特征组合抽象出高级特征[19-20]。深度学习通过构建具有多个隐藏层的网络模型,使用海量数据进行训练,实现自动提取更复杂、更有用的特征,从而具有远超浅层网络的表达能力[21-22]。但深度神经网络的超参数多,参数调节较为困难;需要一定数量的训练样本,少量的训练样本会导致欠拟合的情况;为了保证运行速度,复杂的神经网络结构需要有昂贵的硬件支持。将集成学习方法与深度学习思想相结合,提供了一个有前途的研究途径。Qi等[23]提出的深度支持向量机(DeepSVM)模型是一种新的深度结构,利用Ex-Adaboost学习策略来选择错误率较低、多样性较高的SVM学习器,之后经过每一层生成新的训练数据,完成最终的分类或回归任务。Zhou等[24]提出了深度森林模型gcForest(多粒度级联森林,Multi-Grained Cascade Forest)。它是生成一个深度树集成方法,使用级联结构让gcForest做表征学习,当输入为高维时,通过多粒度扫描,其表征学习能力还能得到进一步的提升,其优势是可以处理小数据量,且超参数少、鲁棒性高。

本文提出一种深度梯度提升模型,使用梯度提升回归树作为个体学习器,采用多层级联结构进行逐层表征学习。以并行化的方法训练个体学习器,进一步提升学习效率。模型可根据数据自动适应学习层数,拟合风险小,超参数少,运行速度快。

1 集成学习算法

1.1 集成学习元算法

集成学习建立一组学习器,基于某种规则将各个学习器的结果整合,从而获得比单个学习器更好的学习效果,提高预测精度并降低过拟合风险。1990年Schapire[25]证明了在概率近似正确(Probably Approximately Correct,PAC)学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的,从而为集成学习奠定了理论基础。集成学习元算法可分为Bagging、Boosting和Stacking三类。Bagging方法通过对训练样本、特征属性集随机采样,学习多个独立模型,对学习结果做平均或投票做出最终的预测,可减小模型方差[13]。Boosting是一个逐步加强的迭代方法,每次学习基于前面模型的训练误差,强调偏差大(错误)的样本,对样本的分布进行调整,最后对多个弱学习器预测值加权组合,可减小模型偏差[14]。Stacking的基本思想是训练一个基本分类器池,然后使用另一个分类器来组合它们的预测,以降低泛化误差[15]。

1.2 梯度提升回归树

梯度提升回归树(Gradient Boosting Regression Tree, GBRT)是FrideMan在2000年提出的一种Boosting方法[26],基学习器为CART回归树。每次迭代中,利用当前模型中损失函数的负梯度值作为提升树算法中的残差的近似值,进而拟合一棵回归树,并叠加得到新模型。对于平方损失函数负梯度就是残差,对于一般损失函数,负梯度可视为残差的近似值。

算法1梯度提升回归树(GBRT)算法

输出:强学习器y=FM(x)。

初始化模型为常数:

(1)

form=1 toM:

计算伪梯度:

(2)

计算回归树hM(x)重系数γm:

(3)

更新模型:

Fm(x)=Fm-1(x)+vγhm(x)

(4)

//v∈(0,1)为收敛参数

end for

输出FM(x)

GBRT组合多个弱学习器可以防止过拟合,具有非线性变换处理能力,不需做特征变换,其缺点是基学习器通过迭代顺序生成,难以实现并行化。

1.3 极限梯度提升树

极限梯度提升树(eXtreme Gradient Boosting,Xgboost)是由Chen等[18]提出的一种正则化的和可伸缩的梯度提升算法。传统的梯度提升算法优化时只用到损失函数一阶导数信息,Xgboost对损失函数进行了二阶泰勒展开,同时利用了一阶和二阶导数,并且可自定义损失函数。Xgboost在损失函数里加入了正则项,用于控制模型的复杂度,综合权衡模型的偏差和方差,简化模型并且防止过拟合。算法具有良好的预测性能,可处理空缺和稀疏数据、支持特征粒度的多核和分布式多处理器并行计算。

2 深度梯度提升模型

2.1 模型结构

深度梯度提升模型使用级联结构的深度集成方法对特征向量进行逐层表征学习,分为输入层、隐层和输出层。

输入层(L1)包括若干学习器(R11,R12,…,R1m)进行初级特征学习,每个学习器使用随机子空间方法随机选择相同大小的不同特征组合的子空间作为输入。隐层中含有隐层学习器进行高层特征抽象。为保持数据集原始特征信息,第一层隐层(L2)的输入为原始特征和输入层若干学习器的输出。从第二层隐层开始(L3),每一层的输入包含原始数据集中的所有特征和所有隐层学习器的输出作为下一层隐层学习器的输入。根据学习结果,隐层层数自适应确定,当上一层的预测结果矩阵与当前层预测结果矩阵的差值绝对值矩阵中每一项值的平均值小于容忍度ε时停止增加层数。输出层(Ln)采用学习器,对最后隐层输出和原始输入特征进行融合预测,得到最终预测输出。其级联结构如图1所示。

图1 深度梯度提升模型级联结构

假设有100维输入特征,输入层结构将在原始的训练集中使用随机特征子空间的方法训练m个学习器并对所给定样本进行预测,形成m维的数据集合,与原始100维输入特征按列进行合并,形成100+m维的数据集合作为首层隐层(L2)中所有学习器(R21,R22)的输入。

从隐层的第二层(L3)开始,隐层中的输入为上一隐层中2个学习器的输出的预测结果和原始100维输入特征按列进行合并的数据集合,共102维,作为下一隐层学习器的输入。以此类推,直到当前隐层与上一隐层的预测结果的每一项差值的绝对值的平均数小于容忍度ε时,则停止增加隐层。

输出层的输入为最后一层隐层中2个学习器的输出预测结果向量(2维)与原始的100维输入特征按列进行合并的数据集合,共102维,输出的最终预测结果为1维向量。

2.2 随机子空间学习

输入层节点以随机子空间方式进行特征提取,可能存在部分节点因差异性和互补性较低,进而导致输入层性能下降的问题。本模型以平均相似度作为衡量标准,去除输入层中较为相似的节点,使得保留下的节点尽可能具有较高的差异性和互补性,以此提高输入层的性能和运行效率[27]。设输入层节点数为k,则输入层第i个节点与输入层其他节点的平均相似度(Average Similarity,AS)的计算公式为:

(5)

式中:θi为第i个节点的输出预测结果,ρ(θi,θj)为第i个节点的预测结果与第j个节点的预测结果的相关系数。

输入层节点的总体平均相似度(Overall Average Similarity,OAS)计算公式为:

(6)

将大于总体平均相似度的节点的输出数据与原始的输入训练集按列进行堆叠,作为隐层第一层(L2)的输入。输入层的随机子空间学习算法如下:

算法2随机子空间学习算法

输入:训练样本Dx_train,训练标签Dy_train,测试样本Dx_test,特征数d,输入层学习器R1={R11,R12,…,R1n},节点数n。

输出:隐层x_train’,隐层训练标签y_train’, 隐层测试样本x_test’。

rtrain={∅}

//训练样本的预测结果集合(按列合并)

rtest={∅}

//测试样本的预测结果集合(按列合并)

fori= 1 tondo

D’x_train=selectRows(Dx_train,F)

D’x_test=selectRows(Dx_test,F)

D’y_train=Dy_train

//保持训练标签不变

hi←R1i(D’x_train,D’y_train)

//训练生成第i个梯度提升树hi

ifASi≤OASdo

//按式(5)和式(6)计算第i个梯度提升树hi的平均相似

//度ASi是否小于或等于总体的平均相似度OAS

rtrain=rtrain∪hi(D’x_train)

//将hi对D’x_train的预测结果按列合并到rtrain

rtest←rtest∪hi(D’x_test)

//将hi对D’x_test的预测结果按列合并到rtest

end if

end for

毛泽东说过,在处理复杂问题时,我们不仅要学会抓主要矛盾,而且要学会抓住矛盾的主要方面。编织打造限制领导干部权力之制度笼子毫无疑问是一项复杂而浩大的系统工程,因此我们必须把官员系列中最主要的官员——“第一把手”的权力作为重点关注和考虑的对象。理由就在于在我国“第一把手”的权力是一种具有“至高无上性”(可凌驾于法律之上)、垄断性和集中性等鲜明特点的“绝对性权力”,而“绝对的权力意味着绝对的腐败”。从近年来媒体所披露的诸多腐败案件事实来看,地方或部门“第一把手”的权力过分集中和无所约束的确是一个被忽视的大问题。

x_train’ ←rtrain∪Dx_train//原始d维特征与m维预测结果

//按列合并,形成d+m维训练数据样本

y_train’ ←Dy_train

//保持训练标签不变

x_test’ ←rtest∪Dx_test//原始d维特征与m维预测结果按

//列合并,形成d+m维测试数据样本

输入层中每一学习器的输入是对原始数据随机抽取的特征子集,各节点采用了随机子空间的方法进行抽取,有利于选择更适当的预测特征组合。输入层的输出结果的每一维度是基于不同特征组合所得出的预测结果,其保持了个体学习器的差异性,作为隐层的输入有利于提高模型的泛化能力,将其与原始特征组合后作为隐层输入,在对原始信息进行高维抽象的基础上,保留了原始样本的信息,避免了隐层决策信息丢失。

2.3 多层表征学习

隐层是由若干个学习器节点组成的级联网状结构,用于对输入层输出的预测值和原始特征组合进行高层特征学习。隐层的第一层根据输入层的输出和原始特征集按列进行合并作为输入;第二层根据上一隐层的输出和原始的特征集按列进行合并作为输入。为降低过拟合风险,隐层层数依据当前隐层预测结果与上一层预测结果变化率均值c和容忍值ε自动调整,容忍值ε为学习结果变化显著性参数,取值为可容忍预测误差下限。当c大于容忍值ε时继续学习,当c<ε时停止训练。

设隐层节点数为k,样本数为n,aij表示当前隐层中第i个样本在第j个学习器的预测值,bij表示上一隐层中第i个样本在第j个学习器的预测值,c值计算公式如下:

(7)

隐层表征学习算法如下:

算法3多层表征学习算法

输入:隐层训练样本Dx_train,训练标签Dy_train,测试样本Dx_test,第i隐层学习器{Ri1,Ri2}容忍度ε,原始训练集,原始测试集。

输出:输出层训练集Dx_train、训练标签Dy_train、输出层测试集Dx_test、隐层层数i。

i← 1

//隐层层数计数变量

c←∞

//相邻层预测累计绝对差值

do while(c>ε)

//累计绝对差值≤ε时算法终止

hi1←Ri1(Dx_train,Dy_train);

//训练生成第i隐层的第一个梯度提升树hi1

hi2←Ri2(Dx_train,Dy_train);

//训练生成第i隐层的第二个梯度提升树hi1

Dx_train=hi1(Dx_train)∪hi2(Dx_train)∪原始训练集;

//对每一训练样本,将本层两个学习器输出与原始训

//练集按列合并组成新的训练样本

Dx_test←hi1(Dx_test)∪hi2(Dx_test)∪原始测试集;

//对每一训练样本,将本层两个学习器输出与原始训

//练集按列合并组成新的训练样本

计算当前层预测结果与上一层预测结果变化率c;

i=i+1;

end do

隐层中每一层的输出都是对之前层数(含输入层)特征的一个高层特征概括,有利于取得良好的预测结果。使用原有数据与每一层隐层学习器的输出进行合并可以在进行高维特征提取时保持原有数据集信息,防止因数据信息丢失而导致预测结果不准确。隐层的层数确定体现了学习结果的变化情况,防止因过多的隐层导致模型过拟合或过少的隐层导致模型欠拟合。ε体现了对于当前隐层和上一级隐层差异值的容忍程度,决定了隐层层数的确定规则。当上一级隐层与当前隐层的差值小于ε时,说明后续的训练即使继续增加隐层数预测结果的变化仍不太明显,即达到收敛。因此差值小于ε时就可停止训练,确定当前隐层为隐层中的最后一层隐层。

2.4 学习法结合策略

当隐层数目确定,即隐层高维特征抽象和提取过程结束,将进行最后的预测。根据学习法的结合策略,同样地,将隐层的输出结果和原始的特征集合按列进行合并作为输出层学习器的输入,输出的是对于原始数据集的预测结果。具体算法如下:

算法4学习法结合策略预测算法

输入:隐层输出的新的训练样本Dx_train,训练标签Dy_train,测试样本Dx_test,输出层学习器R,原始训练集,原始测试集。

输出:预测结果r。

h←R(Dx_train∪原始训练集,Dy_train);

//用隐层输出的新的训练样本与原始训练集按列合并训

//练得到输出层学习器h

r←h(Dx_test∪原始测试集);

//用h预测原始测试集

输出层使用个体学习器进行最后的预测结果输出,体现了学习法的结合策略,有利于扩大假设空间、降低了陷入局部极值的风险、提高了泛化性能。将之前隐层的输出同时堆叠原始的特征信息、继续保留原始数据信息和高层信息作为最后输出层学习器的输入有利于求解出偏差值更低的预测结果。

2.5 模型分析

深度梯度提升模型较传统Stacking集成策略更为复杂,是在梯度提升模型上的再次集成。每一层结构在抽象高维特征的基础上融合原始数据特征,并采用不同的学习器以提高模型的泛化能力。自适应结构可根据数据预测结果自行确定层数,降低了欠拟合或过拟合的风险。输入层、隐层学习可并行化学习,即同一层中的每个节点同时进行训练,提高了模型的运行效率。相比深度神经网络,深度梯度提升树模型的超参数少,训练调参简单。相比传统的集成学习方法,本文所提出的方法可获得更高的预测精度。

3 实 验

3.1 实验设计

设计四个实验验证模型优越性、有效性和参数敏感性。实验一采用6个UCI数据集,将本文提出的深度梯度提升模型与回归树模型、Xgboost集成模型、Stacking结合策略集成模型在不同数据集上进行性能对比分析,以验证所提出模型的优越性。实验二通过在每个数据集上不同输入层节点选择策略的预测评价指标值,分析输入层节点数对预测性能的影响。实验三通过不同隐层数下各数据集的预测评价指标值,分析隐层层数对预测性能的影响,并验证采用适当的容忍度ε值可自适应得到最优隐层数目。实验四分别以串行和线程并行方式对输入层进行构建,对比不同构建方式下的运行时间,验证模型并行化实现的有效性。

对比实验中回归树采用经典决策树回归算法;梯度集成学习模型采用Xgboost算法;Stacking结合策略集成学习模型中,首先由多个Xgboost分别进行学习,之后由Xgboost或GBRT对多个Xgboost的学习结果进行Stacking集成。深度梯度提升模型输入层L1采用多个Xgboost,隐层L2,L3,…,Ln-1分别采用1个Xgboost和1个GBRT,输出层Ln采用Xgboost。

3.2 实验环境

实验所用计算机配置为Intel Core i7 7700HQ(2.80 GHz),16 GB内存,所运行的软件环境为安装在Windows 10上的Python 3.7.1。

3.3 实验方法

实验中使用10折交叉验证的方法对原始样本进行随机划分生成训练集、训练标签和测试集、测试标签,其中训练集占样本的70%,测试集占30%。

3.4 评价指标

回归评价指标包括:平均绝对误差(MAE)、均方误差(MSE)、均方根误差(RMSE)、平均绝对百分误差(MAPE)、希尔不等系数(TIC)和R2系数(拟合优度)等。拟合优度R2是回归平方和在总平方和中所占比率,即回归方程所能解释的因变量变异性的百分比,便于对不同回归模型的拟合程度进行比较,其值越接近1表明模型对观测值的预测性能越好。实验中选取R2系数作为预测模型评价指标,其计算公式如下:

(8)

3.5 实验结果分析

3.5.1算法预测性能比较

实验一将本文提出的模型与传统预测模型进行对比,三种对比模型为:决策树回归模型、Xgboost集成学习模型和Stacking结合策略集成学习模型和深度梯度提升树预测模型。

使用的6个UCI数据集包括:Air Quality、Bike Sharing、Boston 、Diabetes、PRSA和Wine。其中,Wine数据集中将两个数据集文件合并为一个文件,并新加一列类型属性,对其加以区分。数据集统计信息如表1所示。

表1 数据集统计信息

表2 各算法预测性能比较 %

可以看出,相比XGBoost、Stacking集成模型和深度梯度提升模型,经典的决策树回归模型在上述6个UCI数据集中的R2系数相对较低;Stacking集成模型的R2系数在多数情况下高于XGBoost模型,即Stacking集成模型在准确度性能方面较原始XGBoost模型有所提升;深度梯度提升树模型在每个UCI数据集上的R2系数均高于前三种算法,相比Stacking集成模型,在R2系数上平均提高了约5.94 %。结果表明,在上述6个实验数据集中,本文模型的预测性能优于决策树回归算法、XGBoost和Stacking集成学习算法。

3.5.2输入层节点数对预测性能的影响

表3 输入层节点数对R2系数影响 %

3.5.3隐层层数对预测性能的影响

实验三分析深度梯度提升模型的隐层层数对预测精度的影响。在其他参数不变的情况下,分析隐层数取值变化时,对不同数据集上的R2系数的影响(容忍度值取ε=0.015),运行结果如表4所示。

表4 不同隐层数对R2系数影响 %

可以看出,随着隐层数变化,R2系数值也呈现明显变化。对于Airquality数据集,隐层数从1增加到7时R2系数逐渐提高,在第7层时R2系数达到最高值:91.10%,从第8层开始R2系数开始降低,说明当达到第7层时,依据ε取值自动终止构建隐层。 若继续构建隐层,则因过拟合而导致预测精度降低;对BikeSharing数据集,当隐层数为4时R2系数达到最高值71.52%;对Boston数据集,当隐层数为2时R2系数达到最高值:82.04%;对Diabetes数据集,当隐层数为3时R2系数达到最高值:50.80 %;对PRSA数据集,当隐层数为8时R2系数达到最高值:57.96%;对Wine数据集,当隐层数为3时R2系数达到最高值:17.44%。综上所述,隐层的数量对于预测精度(R2系数)存在影响,隐层的数量需要限制在一定范围内,过少或者过多的隐层数都会降低预测精度。

3.5.4并行化运行效率比较

表5 算法并行化运行时间对比 s

可以看出,对各数据集输入层串行构建执行时,运行效率较低,并行化方式构建可缩短运行时间,提高运行效率。在Boston和Diabetes样本量较少的数据集中,使用2线程并行运行时间效率较优,分别为0.281 1 s、0.184 8 s,其加速比为1.42和1.44;在PRSA和AirQuality数据集中,使用4线程并行运行时间效率较优,分别为0.648 2 s、0.199 6 s,其加速比为2.87、3.08;在BikeSharing和Wine数据集中,使用8线程并行化的运行时间效率较,分别为0.437 4 s、0.333 7 s,其加速为4.16和2.91。实验结果表明,本文模型的输入层适用于并行化运行,可显著提升模型运行效率,其并行度受限于与数据特征数相关的输入层节点数目。

4 结 语

本文融合深度学习和集成学习思想,提出了一种深度梯度提升树回归预测模型,以梯度提升回归树集成算法作为基础学习器,以深度学习的逐层表征学习策略将基础学习器组成多层级联结构,进行多层深度学习。输入层进行随机子空间特征学习,以应对复杂学习任务。多隐层结构逐层融合前一层特征学习结果并与原始特征进行逐层表征学习,依据学习变化率自适应确定隐层数。为保留学习器的多样性,隐层采用了GBRT和XGBoost两种不同的梯度提升算法。输出层中使用学习法结合策略对样本进行最终预测。模型采用了并行化方式训练各学习器以提高模型运行效率。实验结果表明,提出的预测模型其预测能力优于现有的集成学方法。

深度学习在处理复杂学习任务上具有显著优势,但深度神经网络计算成本高、超参数多。本文将传统机器学习方法与深度学习思想相结合,提供了一种可拓展的研究方向。

猜你喜欢

隐层梯度深度
磁共振梯度伪影及常见故障排除探讨
基于RTD可编程逻辑门的n变量函数实现算法
基于应变梯度的微尺度金属塑性行为研究
一种自适应确定隐层节点数的增量半监督超限学习机算法
四增四减 深度推进
深度思考之不等式
基于改进烟花算法的ELM 分类模型*
一个具梯度项的p-Laplace 方程弱解的存在性
简约教学 深度学习
基于RDPSO结构优化的三隐层BP神经网络水质预测模型及应用