基于集成学习的装备小样本试验缺失数据插补方法研究

2022-08-26 05:24郭力强刘丙杰
计算机测量与控制 2022年8期
关键词:决策树样本标签

马 亮,郭力强,刘丙杰,杨 静

(海军潜艇学院,山东 青岛 266199)

0 引言

大型装备具有高复杂性、高耦合度、非线性等特点,装备性能影响因素多,关系复杂。由于大型装备试验次数少,试验数据量有限,易导致测试数据易缺失,覆盖性不高。为全面了解装备性能影响因素,有必要对缺失数据进行插补。

目前,常用的数据插补方法有统计量插补法和回归预测插补法。随着机器学习和数据挖掘技术的兴起,回归预测插补法引起了广泛的关注。文献[1]针对统计量插补法效果不理想的问题,使用BP神经网络模型对研究流域降水数据进行插补,取得了较好的插补精度。但模型泛化能力弱,对样本数量要求高。文献[2]提出了联合极大似然估计与EM算法相结合的多重插补方法,但是仅在缺失数据比例小于35%时得到理想结果,存在适用范围受限的问题。文献[3]提出了一种基于均值插补法的EM算法,并与基于线性回归和Bootstrap的修正EM算法进行了比较,结论认为基于Bootstrap的修正EM算法更准确。然而,EM算法在原理上需要有庞大的数据集作为支撑,以保证估计值渐近无偏并服从正态分布,否则可能会陷入局部极值。文献[4]提出了基于K近邻的插补方法,可应用于连续型数据的插补。随机森林的创始人Breiman在文献[5]首次使用模型对缺失数据插补,验证了随机森林对缺失数据插补的可行性。文献[6]分别使用极限学习机、BP神经网络、支持向量机和XGBoost等机器学习模型对潜热通量缺失数据进行插补,结果表明XGBoost与极限学习机的插补效果最佳。

国内外对数据插补方法的研究表明,数据插补问题的本质是一个高噪声的多重回归预测问题。由于大型复杂装备试验具有小样本的特点,这就要求回归器在小样本上具有较好的拟合效果和泛化能力。相比于传统的决策树(decision tree)[7],支持向量机(support vector machine)[8]等对样本数量要求高、容易过拟合的单一模型,集成学习算法会综合多个基学习器的建模结果,以此获取比单个模型更好的预测效果,从理论上适合应用于解决装备小样本试验缺失数据插补问题。

本文以基于Bagging算法的随机森林和Boosting算法的XGBoost为代表,分析集成学习的建模原理,探讨应用集成学习算法解决装备小样本试验数据缺失问题的有效性,并在KEEL公测数据集上对该方法进行了推广验证。

1 理论分析

集成学习算法(ensemble learning)是通过在数据上构建多个模型,综合考虑所有模型的建模结果来提高预测性能的算法。由多个模型集成的模型叫做集成学习器,组成集成学习器的每个模型叫做基学习器,并要求其性能至少要超过随机学习器[9]。由于集成学习算法在处理预测和分类问题中的出色性能,近年来成为KDDcup、Kaggle、天池等大型数据竞赛中的夺冠利器。

1.1 随机森林

随机森林是一种以决策树模型为核心的Bagging算法,用于完善单决策树在处理回归和分类问题中精度不高、容易过拟合的缺陷。2001年Leo Breiman将其提出的Bagging理论与CART决策树,以及随机子空间方法(random subspace method)相结合,提出了一种非参数分类与回归算法—随机森林(random forest)[10]。

随机森林的基本思想可归纳为:首先使用自助重抽样(Bootstrape)的方法从数据量为N的原始样本集D中有放回地随机抽取生成m个与原始样本集D同样大小的训练样本集Dm,在此基础上构建对应的决策树;然后在对决策树的每一个节点进行分支时,从全部Z个特征中随机抽取一个特征子集,即只选择部分特征进行分支,并从这些子集中选择一个最优分支来建立决策树;最后将构建的多棵决策树作为集成学习器形成随机森林,通过对每个基学习器的结果进行评估或者多数表决的方法决定集成学习器的结果[11]。

图1 随机森林构建单颗决策树的流程图

Bagging算法的核心思想是通过并行构建多个尽可能相互独立的基学习器,借助基学习器之间的“独立性”来降低模型整体的方差,从而获得比单颗决策树更低的泛化误差和更强的泛化能力。泛化误差可理解为模型在未知数据集上预测误差,一般可认为由偏差、方差和噪声构成。其中偏差是预测值与真实值之间的差异,用于衡量模型的精度;方差是模型在不同数据集上输出的结果的方差,用于衡量模型稳定性;噪音是数据收集过程当中不可避免的、与数据真实分布无关的信息。

然而,由于所有基学习器都是在相同的原始样本集上进行采样训练,很难实现完全相互独立。假设任意决策树之间的相关系数为ρ,可将随机森林输出结果的方差表示为:

即单颗决策树之间的相关性越弱,随机森林通过降低方差提升的泛化能力越强。因此,为确保Bagging算法的有效性,一方面单个基学习器的误差率至少要保证小于50%,另一方面要尽可能降低基学习器之间的相关性。

图2 基学习器误差率变化影响示意图

由于随机森林引入样本自助重抽样和随机分支策略,通过样本有放回抽样和特征无放回抽样样本的方式,从样本和特征两个维度出发,尽可能使得每颗决策树的训练相互独立。同时可以使用袋外数据(out of bag data)测试模型,有效地提升了效率;在决策树的每个节点只选择部分特征进行分支,从而使树的增长只依赖于该部分的特征,而不是全部特征,在处理高维数据上有着出色性能[12];最终的输出结果由多颗决策树的输出结果平均或投票决定,因此对数据噪声和异常值有了较好的容忍性。

1.2 XGBoost算法

相比于与Bagging算法,Boosting的核心思想是按顺序依次构建相互关联和影响的基学习器,通过某种集成结果输出规则来多次提升弱学习器对样本的预测结果,达到降低模型的整体偏差的目标,构成性能出色的强学习器。假设衡量模型预测结果与真实结果的差异的损失函数为L(x,y),基学习器为f(x),算法集成输出结果为H(x),则Boosting算法的建模流程可表示为:依据上一个弱学习器f(x)t-1的结果计算损失函数L(x,y),并使用L(x,y)结果自适应影响下一个弱学习器f(x)t的构建。经T次迭代后,根据某种集成输出规则计算所有弱学习器的f(x)0~f(x)T的预测结果得到H(x)。

Boosting算法的开山代表是AdaBoost[13](adaptive boosting)算法,它的基本思想是:首先在抽取的训练样本上建立一棵决策树,根据该决策树预测的结果f(x)t和损失函数值L(x,y),增加被预测错误的样本xi在数据集中的样本权重wi,并让加权后的数据集被用于训练下一棵决策树,即通过调整训练数据的分布来间接影响后续弱学习器的构建。

2001年Jerome Friedman提出一种全新的损失函数计算公式—弗里德曼均方误差[14]:

impurity_decrease=

w是叶子节点上的样本权重,ri=y-H(xi)是样本xi上的残差。即通过这种拟合残差的方式直接影响后续弱学习器的构建结构,并且采用调和左右叶子节点权重的分支规则加速了CART决策树的预测效率,在AdaBoost的基础上,形成GBDT(gradient boosting decision tree)算法。

2015年T.Q.Chen提出XGBoost[15](eXtreme gradient boosting)算法,在GDBT的基础上改进集成输出结果的评估策略,通过对损失函数进行二阶泰勒展开和添加正则项的方法,有效避免了过拟合问题并加快了模型收敛速度。其输出结果的评估策略可表示为式(1):

(1)

(2)

(3)

(4)

其中:gi表示样本xi的一阶导数;hi表示样本xi的二阶导数;wj表示第j个叶子节点的输出值,Ij表示第j个叶子节点含有样本的子集。简化式(4)中的目标函数,可定义:

(5)

观察可得,目标函数是一个凸函数:

(6)

在式(6)中对wj求导,令一阶导数等于0,可求得使目标函数达到最小值的wj,即:

(7)

式(8)可以用来评价树模型的得分,其数值越小,树模型的得分越高。由此可以得出用于树模型进行分枝的得分公式:

(8)

2 数据插补方法

2.1 统计量插补法

统计量插补法的基本思想是通过计算缺失特征的某一统计量,并用这个值来插补该特征的所有缺失数据。常用的统计量有平均值、中位数值和众数值。该方法思想简单,应用最为广泛,可根据缺失数据类型分别处理:通常情况下,若缺失值为连续数据,则使用对该特征未缺失部分样本平均值或中位数值插补的方法;若缺失值为离散数据,则以该特征未缺失部分样本出现频率最多的数值进行插补。

2.2 回归预测插补法

回归预测插补法的基本思想是通过构建回归模型,从数据中挖掘特征矩阵与标签之间的关联规则,训练能够映射特征矩阵与标签关系的回归器,实现对缺失数据的预测,并将预测结果作为插补结果。由于数据集的标签和特征是人为标注的,因此可以通过自定义特征矩阵和标签,重新构建数据子集的方式进行回归预测。

2.2.1 单特征值缺失情况

在样本数量为n,特征数量为m的数据集上,假设某一特征xi存在缺失值,将存在缺失值的特征xi定义为数据集的标签y,其余m-1个未存在缺失值的特征和原始标签定义为数据集的特征矩阵X。那么,不含缺失值的样本中既存在特征值也存在标签值,将其作为用于构建回归模型训练集(training set);包含缺失值的样本中只存在特征值没有标签值,将其作为用于检测回归模型性能的测试集(testing set),其中测试集中缺失的标签值即为回归预测的对象。通过这种方式完成数据子集的重建以及训练集和测试集划分。

2.2.2 多特征值缺失问题

当数据集的多个特征值存在缺失时,可采用如下方法实现数据子集的重建和迭代划分:

Step1:根据缺失数据集的特点,设定快速填充基准和特征重要性评估策略。快速填充基准可使用平均值、中位值等统计量,以快速对缺失值较少的特征进行插补;特征重要性评估策略可根据特征缺失程度大小或特征对标签的贡献度,以此确定对多个缺失特征的插补顺序Uindex。一般来说,当某一特征的缺失值越少,损失的信息也就越少,使用统计量快速插补的效果越好;反之特征的缺失值越多,损失的信息也就越多,使用统计量填充的效果越差,应当优先选中进行回归预测。

Step2:根据多个缺失特征的插补排序Uindex=[U1,U2,U3,...,Ut(t≤m)],使用快速填充基准对U1外的m-1特征的缺失值进行填充,将多特征值缺失问题转换成单特征值缺失问题,按照单特征值缺失的情况进行数据子集的重建以及训练集和测试集划分。

Step3:选择数据预处理方式和回归结果评估指标,采用5折交叉验证的方法优化回归模型超参数后,训练回归器得到U1缺失值的预测结果,并将本轮的数据插补结果返回至缺失数据集相应位置,作为下一次迭代回归的输入。

Step4:按照Uindex排序重复Step2~3过程,经t次迭代回归预测后,最终得到整个缺失数据集的插补结果,再根据回归结果评估指标对快速填充基准、特征重要性评估策略及回归器进行改进和提升。

3 实验与分析

潜射导弹因其机动范围广、攻击突然性强,装弹数量多、反击威力大等特点备受各大军事强国重视。潜射导弹弹射出筒经过水介质出水至空中再进入预定弹道,水下飞行段和出水段是潜射导弹发射所独有的过程,对发射结果影响巨大。

出筒速度是影响水下弹道姿态和发射精度的关键因素之一[16-17]。受众多客观条件影响,发射深度、海流速度、海浪高度和气幕弹等都会对出筒速度产生影响[18-20]。为确保导弹安全可靠的发射,需根据试验数据的有关信息对导弹出筒速度的影响因素进行分析。但是受水下发射特殊环境的影响,观测数据易出现缺失,因此有必要对试验缺失数据进行有效插补。

3.1 实验设计

实验在Windows 10环境下进行,使用JupyterLab 3.10 IDE和Python 3.9 Kernel,调用Scikit-Learn库版本为1.01。CPU配置为AMD Ryzen 5-5600H,主频3.30 GHz,内存16 GB。

以某型潜射导弹发射试验样本为原始数据集,以发射深度、潜艇航速、海流速度、海面波高作为原始特征,出筒速度为原始标签数据,采用完全随机缺失方式,缺失数据标记为NaN值,建立缺失数据集。

初始采用平均值作为快速填充基准,将数据缺失程度作为特征重要性评估策略,使用Z-Score标准化的方法对特征数据进行预处理。为反映插补数据对真实数据的整体拟合程度,以回归确定系数R2(R2=SSR/SST)作为插补效果评估指标,用于检验和提升回归器插补效果。由于回归器的泛化性能受超参数的影响较大,模型的复杂程度越高,超参数的数量越多。因此,为提高数据插补的效率,使用Optuna框架[21]采用TPE (tree-structured parzen estimator approach)[22]贝叶斯过程对回归器超参数实现自动优化。数据集的重建划分和回归器训练过程部分代码如下所示:

X_full实验数据集特征矩阵 y_full实验数据集标签

X_missing缺失数据集特征矩阵 y_full缺失数据集标签

X 重建数据集特征矩阵 y重建数据集标签

from sklearn.impute import SimpleImputer as SI

from sklearn.preprocessing import StandardScaler

import optuna

按照特征缺失程度进行插补排序

sortindex = np.argsort(X_missing.isnull().sum(axis=0)).values

for i in sortindex:

构建新特征矩阵

X = X_missing

X = pd.concat([X.iloc[:,X.columns!=i],y_full],axis=1)

使用统计量对含有缺失值的特征进行快速填充

X = SI(missing_values=np.nan,strategy='mean').fit_transform(X)

构造新标签

y = X_missing.iloc[:,i]

新标签真实数据

y_full = X_full.iloc[:,i]

数据预处理

scaler = StandardScaler()

X = scaler.fit_transform(X)

scaler = StandardScaler()

X = scaler.fit_transform(X)

划分训练集测试集

Y_train = y_new[y_new.notnull()]

Y_test = y_full[y_new.isnull()]

X_train = X_new_mean[Y_train.index,:]

X_test = X_new_mean[Y_test.index,:]

自动优化回归器超参数

best_params,best_score = optimizer_optuna(300,"TPE")

实例化回归模型

Reg = Regressor(best_params)

训练回归器

Reg = Reg.fit(X_train,Y_train)

预测缺失数据

Y_predict = Reg.predict(X_test)

将预测结果返回至缺失数据集

X_missing.loc[X_missing.iloc[:,i].isnull(),i] = Y_predict

评估数据插补效果

loss = criterion (X_full,X_missing)

3.2 结果分析

初始设置特征矩阵缺失比例为20%,同时使用统计量法和回归预测法对缺失数据进行插补。为评估集成学习算法的插补性能,分别使用基于Bagging思想的Random Forests和Boosting思想的XGBoost两种典型的算法作为回归器,并使用KNN和MLP算法与之比较。统计量法和回归预测法对缺失数据的插补结果如图3所示。

图3 20%缺失比例下插补效果评估图

在特征矩阵缺失比例为20%的情况下,使用平均值和中位数值插补得到的R2结果分别为0.833和0.820;使用KNN、MLP、Random Forest和XGBoost回归器插补得到的R2结果分别为0.975、0.961、0.983、0.980。可以看出回归插补法的效果明显优于统计量插补法,其中使用集成算法构件的回归器性能最优。

为进一步检验回归预测插补法的适用范围,将特征矩阵缺失比例调整为10%、15%、20%、25%、30%,分别建立缺失数据集进行插补实验,得到如表1和图4所示的结果。

表1 不同缺失比例下的插补效果

图4 不同缺失比例下的插补效果

由图4可知,回归预测插补法具有较好的适用性,在不同缺失比例下,均能保持较好的数据插补效果。随着数据缺失比例的增大,统计量插补法的效果越差,回归插补法的优势体现的越明显,其中,使用集成算法的回归器在25%、25%和30%等高缺失比例下,R2结果均能保持在0.95以上,验证了该方法的可靠性,可应用于装备小样本试验缺失数据插补。

3.3 方法推广

除了装备小样本试验,插补缺失数据是数据分析和处理工作中必不可少的一环,有必要验证该方法的通用性和推广价值。因此,使用KEEL公测数据集“dee”和“wizmir”进行上述数据插补实验。其中“dee”数据集的样本数量为365,特征数量为6;“wizmir”数据集的样本数量为1461,特征数量为6。得到的插补结果如表2所示。

表2 KEEL公测数据集下的插补效果

由表2可知,该方法在公测数据集上具有通用性,在10%和20%缺失比例下,R2结果仍能保持在0.92以上。但是回归预测插补法在回归器的构建、超参数优化以及模型性能评估上需要投入大量的时间成本和计算代价。综合衡量,统计量插补法适合在样本数量大、缺失特征数目少、整体数据缺失比例较低(<10%)的数据集;而回归预测插补法更适合用于缺失比例较高、特征相关性显著的数据集。

4 结束语

针对装备小样本试验次数少,测试数据易缺失的特点和常用数据插补方法对数据量要求高、计算复杂的问题,本文提出了一种基于集成学习的数据插补方法。验证结果表明,该方法明显优于统计量插补法,模型的数据拟合能力和泛化能力较强,在不同缺失比例下均有较好表现,能偶有效解决装备小样本试验数据缺失问题,同时具有一定的推广价值和通用性。为进一步提高缺失数据的插补效果,下一步将结合时序数据的预测处理方法,进一步优化缺失数据插补效果。

猜你喜欢
决策树样本标签
简述一种基于C4.5的随机决策树集成分类算法设计
不害怕撕掉标签的人,都活出了真正的漂亮
直击高考中的用样本估计总体
随机微分方程的样本Lyapunov二次型估计
决策树学习的剪枝方法
让衣柜摆脱“杂乱无章”的标签
科学家的标签
科学家的标签
基于支持向量机的测厚仪CS值电压漂移故障判定及处理
七年级数学下册期末检测题(B)