2025-01-09来源:EPS数据
1. 引言
在机器学习领域,当处理分类或回归问题时,常规思路是优化机器学习算法以提升预测精度。除了调整模型参数与结构来实现模型最优化外,还有一种途径,那就是整合多个模型,借此达成比单一模型更优的预测精准度,这种方法被称为集成学习算法,其中 Boosting 和 Bagging 极具代表性。Boosting 算法的运作方式是,对前一个弱学习器误分类的样本提高权重,以此迭代训练弱学习器,最终通过加权把所有弱学习器组合成一个强学习器;而 Bagging 算法则是运用 Bootstrap 采样法获取每个基模型的训练数据集,进而得到不同的基模型。另外,还有一种集成学习算法叫 Stacking,它的模型结合方式别具一格:把多个基模型的预测当作新特征,接着利用这些新特征训练元模型,并采用特定结合策略将元模型的输出作为最终预测结果。
通常在解决具体问题时,我们会挑选效果最佳的机器学习模型。但在特定问题与场景下,每个模型都各有利弊,很难说某一个模型占据绝对优势。倘若能够整合多个模型的长处、规避其短处,往往就能收获更理想的成果。Stacking 算法提出了基模型与元模型这两个核心概念,其基本原理是将基模型的预测结果作为元模型的输入,再把元模型的输出经结合策略整合后作为最终预测输出。一般而言,Stacking 算法比单个模型在预测表现上更出色。
我们首先介绍实验所用的数据集、特征工程、模型评估指标和回归模型,然后通过网格搜索策略,结合均方根误差作为模型评价指标获得回归模型的最优参数,并通过交叉验证进行模型选择。最后,我们基于模型选择的结果将基于多个元模型的 Stacking 算法应用于回归问题中,通过使用OLS线性回归加权平均的方式将每个元模型的预测组合,作为最终的预测结果。实验结果表明基于多个模型的 Stacking 算法有效的提高了预测精度。除此之外,我们对改进后的算法的计算效率、元模型数量对性能的影响等方面进行了验证与说明。
2. 方法
针对 Stacking 算法,我们进行了一系列改进:相较于原始 Stacking 算法中的单一元模型,我们运用多个元模型,把每个基模型的输出作为多个元模型的输入,然后综合多个元模型的输出得出最终预测结果。尽管这在一定程度上会延长训练时间,但模型的泛化性能却能得到增强。经实验验证,基于多个元模型的 Stacking 算法相较于单个基模型有着更出色的预测效能。Stacking 算法借助多个元模型来预测新,如此一来,即便部分元模型预测效果欠佳,我们也能够权衡,在多个元模型里挑选效果最优的几个作为结合对象。实验结果充分表明,Stacking 算法成功弥补了单个元模型的不足,实现了更优异的预测效果。
图1 基于多个元模型的 Stacking 算法
2.1 回归模型简介
我们将对用作基模型和元模型的基本回归模型进行讨论。Lasso 回归、 Ridge 回归、ElasticNet 回归都是线性回归模型。2.1.1 Lasso
Lasso 回归是一种 L1 正则化的线性回归模型,其损失函数表示为
其中, 表示样本数,
表示样本,通常是一个
维向量,
是特征维数。
是每个样本的真实值(回归问题中)或者类标签(分类问题中), α 是惩罚项的系数,
是要优化的参数向量,
表示参数向量的
正则化。
通常来说,Lasso 回归解决的是包含 正则项的最小二乘优化问题。其中, α 是 一个决定了参数向量
稀疏性的参数,维持了模型复杂度和预测精度之间的平衡。 α 值越大,惩罚项的比重就越大, α 越小,惩罚项的比重就越小。如果 α 的值太大,模型容易欠拟合;反之模型容易过拟合。
2.1.2 ElasticNet
ElasticNet(ENet)回归也是解决最小二乘优化问题的线性模型,与 Lasso 回归不同的是,它的惩罚项包含了 正则项和
正则项,其损失函数是
等价于
其中,。
α 是一个控制整个正则项的系数,是一个维持
正则项和
正则项平衡的系数。特别的,当
时,ElasticNet 回归等于 Lasso 回归。我们分别通过
和
来调节
正则项和
正则项。
通过参数 ,
正则项和
正则项结合形成一个凸组合,这样一来,就在 Lasso 回归和 Ridge 回归之间形成一个平衡,使模型更加具有鲁棒性。这样的组合使模型既可以学习到一个像 Lasso 回归一样的稀疏模型,同时还可以拥有 Ridge 回归的泛化性。
2.1.3 Ridge
Ridge 回归是一个包含 正则项的最小二乘损失函数。Ridge 回归与 Lasso 回归的不同之处在于,前者的正则项是
,后者是
。Ridge 回归的损失函数是
Ridge 回归通过添加 正则项(即
)来约束模型参数的大小,从而减少过拟合的风险。这对于处理高维数据或特征之间存在多重共线性的场景尤为有效。
正则化会让模型倾向于均匀地缩小所有权重,而不是强制某些特征的权重为零(与 Lasso 不同)。因此,Ridge 回归会保留所有特征,但会减少它们对输出的影响。
3. 数据处理
3.1 数据集简介
我们基于EPS数据平台中2003年至2022年华北地区人均地区生产总值、就业人员数、财政一般预算收入、居民消费价格指数等经济指标,共收集了10个指标,其中我们把居民消费价格指数作为要拟合的目标值,其他指标为特征变量。具体数据可以由此查询https://www.epsnet.com.cn/
3.2 特征工程
在本节中,我们对数据集进行简单的数据预处理,使之可以用于机器学习模型的训练。数据集中的值都是与经济指标相关的数值,属于比较规范的数据集,无需进行大量的数据预处理,因此,我们主要对数据集进行缺失值填补和标准化处理等过程。
3.2.1 填补缺失值
我们通过对数据集的观察发现,有些特征中包含大量的缺失值,这样的数据集无法进行模型的训练,因此我们首先要填补数据集中的缺失值。面对包含缺失值的数据集时,最基本的策略是丢弃包含缺失值的行或者列,但是,这样却面临损失重要数据的代价。在不丢失数据信息的前提下,我们还可以通过填补缺失值来尽可能还原原始数据。根据具体的数据缺失情况,我们将结合两种方式来处理数据集中缺失值问题。
3.2.2 标准化
在填补缺失值之后,再将数据集进行标准化处理。标准化是一种特征缩放的方式。为什么要进行特征缩放?如果某一维数特征的数值比其它维数特征大几个数量级,那么它将主导机器学习模型的目标函数,使得模型无法学习其它维数的特征。在一些需要计算距离的机器学习模型中,例如K近邻算法,如果一个特征取值范围远远超过其它特征,那么在计算距离时其它特征的计算结果将只占据很小一部分,甚至被忽略。因此标准化处理是特征工程中一个重要的数据预处理过程。
我们假设数据集是一个 N × M 维的矩阵。则标准化公式可表示为
其中, 表示第n个样本的第 m维特征,
和
分别表示第 m 维特征的均值和标准差。
第 m 维特征的均值表示为
其中,N 表示样本数, 表示第i个样本的第m维特征的值。
第 m 维特征的标准差表示为
其中, 表示第m维特征的方差,标准差是方差的平方根。
由上述归一化公式可以看出,数据集的标准化在每一维特征中是相互独立的。经过标准化处理之后,数据集中的每一维特征都被缩放为均值为 0 的数组。这样的好处是,每一维特征都被缩放到同一个数量级,避免了机器学习模型训练时出现偏移。如果没有经过标准化处理,在训练模型的过程中会出现偏向数量级较大的特征的现象。
3.3 模型评价指标
在回归问题中,有两个常用的模型评价指标,分别是平均绝对误差(MAE)和平均平方误差(MSE)。在本次实验中,我们选择均方根误差(RMSE)作为模型评价指标,RMSE 是 MSE 的算术平方根。RMSE 定义如下
其中,N 是样本数, 和
分别是第i 个样本的真实值和预测值。MSE中除以 N 将不同数量的样本缩放到同一个基准。RMSE中确保 MSE 的偏差与要预测的变量在同一范围内。RMSE 计算预测值和真实值之间的偏差,其值越小,模型的预测精度越高。
4. 结果
4.1 最优参数选择
在进行实验之前,先调整每个基模型的参数,使它们的预测精度达到最佳。我们采用网格搜索来选择最优参数。超参数不是通过直接学习获得的参数,而是由模型决定的参数,不同模型有不同的超参数。例如Lasso 回归中的α 、Ridge回归中的α等。通过调节超参数,可以使模型获得最佳的预测性能。
网格搜索是一种调试模型超参数的方式。将需要调整的超参数的所有取值通过排列组合的方式依次用于模型的学习,从而获得所有超参数的最佳组合,使模型达到最优的预测效果。最优参数选择采用的数据集为所有数据集的训练集部分,将训练集再分为两部分,分别是训练集和验证集,二者的比例大致为 8:2。然后将模型在训练集上进行训练,在测试集上进行测试,获得每个超参数组合的测试结果,将测试结果最好的超参数组合作为模型的最优参数。
评价指标函数,我们绘制了曲线来描述基模型的 RMSE 随参数变化。下图明了 Lasso 回归的 RMSE 随着参数 α 变化以及另外两个基模型Ridge和ElasticNet模型。从图中可以看到,曲线先下降后上升,当 α = 0.01 时 RMSE 取得最小值。α 的值越大,施加在参数上的惩罚就越大(正则项的比重就越大)。如果参数 α 的值选取不当,很容易造成过拟合或者欠拟合。同理Ridge回归中参数设置为α = 10时为最小RMSE,ElasticNet回归模型中,L1正则占比为10%且α = 0.1时,RMSE达到最小。
图2 各元模型RMSE随参数的变化
4.2 模型选择
我们采用 k-fold 交叉验证的方式进行模型选择。需要注意的是模型选择和最优参数选择的先后顺序,应该先进行最优参数选择,将每个模型的性能调整到最优,然后再通过交叉验证进行模型选择。交叉验证和网格搜索的区别在于,网格搜索是为了获得模型的最佳参数或者最佳参数组合,而交叉验证的目的是通过将数据集分为若干部分,来验证模型的预测能力和泛化能力。将数据集分为若干部分的目的在于避免因为数据集的不均衡造成的误差。当训练模型的数据集和对其进行测试的数据集相同时,会得到一个相当完美的结果,但是这显然是错误的做法。因为模型在测试时所使用的样本及其标签在训练阶段已经“见过”,再次使用相同的样本和标签来对模型进行测试时,模型会“记得”之前数据,并很好的拟合它们。但是,一旦遇到未见过的数据时,模型的性能将大打折扣。为了避免这种现象,通常在进行模型训练时,将数据集分为训练集和测试集。但是有时候会出现样本不均衡的情况,即某一类或某几类样本集中出现在一起,导致在训练模型时缺乏对该类型样本的训练。如果直接将训练好的模型对测试集进行测试,可能会出现过拟合或者欠拟合。
为了解决这个问题,可以将数据集的另一部分作为验证集。这样一来,模型在训练集上进行训练,在验证集上进行验证,最终在测试集上进行测试。当模型在验证集上表现良好时,就可以在测试集上进行最终的评估。可是,将数据集分为 3 部分,很大程度上减少了用于训练模型的样本,尤其是面对小样本数据集时,这样的划分方式可能会导致训练样本不足,继而导致模型的欠拟合。而且,由于训练集和验证集选取的随机性,模型的训练结果也将具有不确定性。交叉验证的出现正是为了解决这类问题。通过将数据打乱顺序,然后依次将每部分数据作为验证集,最后将模型对所有验证集的预测结果的平均数作为交叉验证的输出,这样即避免了过拟合和欠拟合,又解决了数据不均衡问题。
将训练集分为 k 部分,然后依次进行训练和测试过程,最后综合分析 k 个测试结果的平均数和方差,来获得最佳的 fold 数。交叉验证虽然会损耗一定的计算资源,但是却最大化的利用了数据,将每一部分数据都作为 1 次验证集,并多次作为训练集。尤其是当样本数较少的情况下,更能发挥其优势。
图3 交叉验证原理图
4.3 实验分析
本次实验的数据集属于小样本数据集,因此选择交叉验证来评估模型的预测误差。基模型在不同 fold 下的交叉验证误差。从中可以得出,除了 Ridge 回归之外,所有基模型都在 fold=3 时达到了最小交叉验证误差。fold 值如果选择不当会导致误差,fold 值太小,训练集样本的数量相对就小,导致模型训练不够充分;相反fold 值太大,测试集样本的数量相对就小,很可能导致预测出现偏差。最终的预测精度的计算不仅要考虑到每次迭代的均值,还要考虑到方差。当均值较小方差较大,意味着每次迭代产生的结果差异较大,也就是说模型的泛化性较差。因此,综合考虑了均值与方差,我们将 fold 值选取为 3。
图4 折数k对各元模型RMSE影响
在选择了三个基模型后,我们将它们应用到Stacking 算法中。为了优化各个元模型的组合权重,我们使用OLS线性回归来根据各个元模型的交叉验证表现来学习最优的权重。通过这种方式,OLS线性回归模型自动学习了基模型的最佳权重,并生成了相对较好的结果,优于任何单一的元模型。
图5 各元模型和Stacking组合模型的损失
5. 结论
我们主要阐述了基于多个元模型的 Stacking 算法在回归问题中的应用,对数据集、模型评价指标、最优参数选择和模型选择等方面的内容进行了分析,最终将通过模型选择得到的回归模型对基于多个元模型的 Stacking 算法进行了验证。通过对算法的计算时间进行了测试,证明了其以较低的时间成本即可获得较显著的精度提升。对比单一的元模型算法,基于多个元模型的 Stacking 算法有效的提升了回归问题的预测精度。
表1 各元模型和Stacking组合模型耗时对比
模型 | Lasso | Ridge | ElasticNet | Stacking |
时间(s) | 0.0080 | 0.0070 | 0.0370 | 0.1066 |
上一条:GBM算法在预测任务中的对比分析
下一条:大语言模型下的时间序列预测方法