3.1 问题重述
气象预测的核心:一是污染与气象条件机理研究;二是各污染物之间的化学反应机制研究。在污染排放源一定的情况下,气象条件是决定污染物浓度及分布的重要因素。
问题二采用适当的方法构建空气污染物相邻两日浓度差值的预报模型,对模型的构建过程进行详细阐述,选取空气污染物对预报模型进行设计。
3.2 问题的分析
对于空气质量日浓度差值的变化情况,由于气象因素仅会对污染物的积累或去除造成影响,而与污染源的释放,即污染物浓度的原始增加不具有相关性,因此我们需要将每日污染物浓度的基础数据,即前一日甚至前几日的污染物浓度数据也纳入预测模型中,由此数据的前后关联性和序列性适合使用回归模型和时间序列模型进行分析预测,对于这两个模型来说,其连续性特征对于数据的包容性较强。
对污染物浓度的预测,除了与不同种类的污染物类别相关,还具有天气时序数据固有的特点。就污染物种类和气象因素而言,它包含6个类别的污染物,具有很强的非线性特征。因此,本文选用机器学习和深度学习算法对污染物浓度数据进行回归分析。
综合上述考虑,本文将回归分析和时间序列分析预测与机器学习和深度学习算法结合起来,建立污染物浓度的预测模型。
3.3 模型的建立及求解
严格从问题本身和数据出发思考模型的选用问题,首先作为预测问题可考虑选用回归模型和时间序列模型,而且数据本身达到一定规模阈值,为充分地利用数据特征强化分析效果,考虑采用机器学习模型和深度学习模型并结合回归模型和时间序列模型的方法进行数据挖掘预测。分别采用SVM支持向量机回归模型、K近邻回归模型、CNN卷积神经网络回归模型、rt随机森林回归模型、集成学习Gradient Boosting回归模型和RNN LSTM时间序列模型进行数据的分析处理,这里重点讨论具有代表性的K近邻回归模型、CNN卷积神经网络回归模型、集成学习Gradient Boosting回归模型和RNN LSTM时间序列模型。
在数据集的选用上,根据第一问提出的方法,选用以下数据集及其对应的气象因子作为相关预测模型的实验数据集:
(1)石家庄春季PM2.5情况:年,月,日,最高气温,最低气温,20-20降水量,本站气压4次平均,相对湿度4次平均,日最大风速,日照时数合计,混合层高度。
(2)石家庄冬季NO2情况:年,月,日,最高气温,最低气温,相对湿度4次平均,最小相对湿度,日最大风风速,日照时数合计,混合层高度。
(3)邢台夏季SO2情况:年,月,日,最高气温,20-20降水量,本站气压4次平均,相对湿度4次平均,最小相对湿度,日照时数合计,混合层高度,地表通风系数。
对于预测模型的评判,主要采用真实值与预测值直接对比、相关关系图、R2值(决定系数)。其中,真实值和预测值对比,即将两个值对应的曲线置于一张图中进行对比分析;相关关系图中,横坐标为预测值,纵坐标为真实值,拟合散点对应直线斜率(相关性)判断模型优劣;R2值的计算方式为
3.3.1 K近邻回归模型对数据的分析处理
K近邻法进行回归分析的现实基础是实例类别即数据维度有限。该算法进行预测或分类的操作过程是在其给定数据(矩阵)的训练样本中,选取K个最近邻样本即训练实例,通过多数表决的方式进行目标值的确定。从其实现过程来看,它属于机器学习算法,不具有明面上的数理逻辑过程,衡量待测样本回归值的不同方式有两种:第一,对K个近邻目标数值使用普通的算术平均算法;第二,对K个近邻目标数值考虑距离的差异进行加权平均。
在算法实现上,主要调用Python sklearn.neighbors库中的KNeighborsRegressor方法,该方法主要包括以下参数:
(1)N_neibors:表示所选择邻域样本的数量,换言之即邻域空间的规模,该参数对于结果的影响主要体现为邻域规模的不同。直接影响到训练样本对准确结果的充足性以及过多无用样本产生的噪声影响。
(2)Weights:表示领域内各样本的权重,包括'uniform'、'distance'和自定义函数,'uniform'表示紧邻样本权重相同,'distance'表示越靠近的样本权重越高。
(3)Algorithm:对紧邻样本的计算算法,有'ball tree'、'kd tree'、'brute'等算法,分别代表其名称所示的算法。
(4)Leafsize:该参数针对'ball tree'、'kd tree'算法,影响到这两个算法的运算速度和内存划分。
(5)Metric:表示K近邻算法的距离矩阵,主要用到minkowski和Euclidean两种矩阵。
为了提高调试参数的效率,在这里调用sklearn.model_selection中的GridSearchCV方法,其调试参数的原理主要是基于KFold算法,即K折交叉验证方法(K折交叉验证方法可大致理解为将原数据集多次拆分为训练集和测试集,由训练集训练模型在测试集上进行验证,从而确定模型优劣),从参数池中选取参数,反复使用K折交叉验证方法确定参数优劣,对于K近邻回归模型,我们设定的参数池为
(1)N_neibors的取值为5, 10, 15, 20;
(2)Weights的取值为'uniform'和'distance';
(3)Algorithm的取值为'ball tree'、'kd tree'、'brute';
(4)Metric的取值为minkowski和Euclidean;
通过给定调用GridSearchCV,选用的参数情况如表10所示。
表10 K近邻算法最优参数
模型使用最优参数进行回归分析,得到预测值,其预测效果如下图所示(绿线为真实值,蓝线为预测值)。
图1 石家庄春季PM2.5的K近邻真实值、预测值对比图
图2 石家庄冬季NO2的K近邻真实值、预测值对比图
图3 邢台夏季SO2的K近邻真实值、预测值对比图
从图1~图3可看出,使用K近邻回归时,预测值变化趋势虽与真实值相仿,但变化幅度不明显,特别是在最值处变化幅度相差最大,但考虑到部分未预测到的点为极端条件产生的噪声点,模型仍能在一定程度上反映真实情况。
图4~图6为K近邻回归模型对石家庄春季PM2.5数据、石家庄冬季NO2数据、邢台夏季SO2数据回归分析后得到的相关关系图,其散点拟合曲线值代表相关性值,分别为0.635,1.316,0.894 5,可见均为正相关关系,预测值与真实值具有较好的相关性(±1,±0.4),反映了模型对于该问题(数据集)的良好适用性。
图4 石家庄春季PM2.5的K近邻回归相关关系图
图5 石家庄冬季NO2的K近邻回归相关关系图
图6 邢台夏季SO2的K近邻回归相关关系图
3.3.2 集成学习Gradient Boosting回归模型
对于集成学习Gradient Boosting回归模型的理解应当是基于强学习算法和弱学习算法的概念。弱学习算法指算法模式简单、正确率较低的一系列算法,得到的结果仅强于随机概率;强学习算法则指以多项式组合简单学习算法的模式构筑的算法,正确率较高。Boosting算法采用迭代的方式有效地对弱学习算法(基学习器)进行整合,以提高整体正确率,达到成为强学习算法的目的,Gradient Boosting通过迭代整合基学习器的思路为梯度下降法。
其算法如下:
在算法实现上,主要调用Python sklearn. ensemble库中GradientBoostingRegressor方法,该方法主要包括以下参数:
(1)Loss:用于迭代优化收敛使用的损失函数,包括'ls'、'lad'、'huber'、'quantile'四个选项,分别代表一种损失函数。
(2)Learning_rate:表示用于回归树递进优化的学习率,默认为0.1。
(3)n_estimater:表示GradientBoostingRegressor这一强学习算法所采用的基学习器数目。
(4)max_depth:单个回归树的最大深度也即节点数,与采用的数据集相关性较强。
(5)criterion:用于考量节点选取的参数。
(6)max_features:可以输入数字,也可以采用sqrt、log2等方法,用于生成最大特征数。
(7)min_samples_leaf:节点对应的样本规模。
调用GridSearchCV方法,设定参数池为
(1)Loss:'ls', 'lad', 'huber', 'quantile';
(2)Learning_rate:0.2, 0.1, 0.05, 0.02, 0.01;
(3)n_estimater:10, 20, 30, 40, 50, 60, 81;
(4)max_depth:4, 6, 8, 10, 14;
(5)min_samples_leaf:3, 5, 9, 14;
(6)max_features:0.8, 0.5, 0.3, 0.1。
表11 Boosting算法最优参数
模型使用最优参数进行回归分析,得到预测值,其预测效果如图7~图9所示(实线为真实值,虚线为预测值)。
图7 石家庄春季PM2.5对照图
图8 石家庄冬季NO2对照图
图9 邢台夏季SO2对照图
从图7~图9可以看出,使用集成学习方法Gradient Boosting回归时,预测值变化趋势与真实值相仿,变化幅度也近乎一致,只有在个别最值处有一定相差变化幅度,考虑到部分未预测到的点为极端条件产生的噪声点,模型能够较好地反映真实情况。
图10~图12为集成学习方法Gradient Boosting回归模型对石家庄春季PM2.5数据、石家庄冬季NO2数据、邢台夏季SO2数据回归分析后得到的相关关系图,其散点拟合曲线值代表相关性值,分别为1.055,0.7458,0.927 0,均为正相关关系,预测值与真实值具有较好的相关性(±1,±0.4),且明显在预测可靠性上优于K近邻回归模型,反映了模型对该问题(数据集)的适用性。
图10 石家庄春季PM2.5相关关系图
图11 石家庄冬季NO2相关关系图
图12 邢台夏季SO2相关关系图
3.3.3 CNN卷积神经网络回归模型
对于卷积神经网络,与其他神经网络相比,结构上具有一定的相似性,均为由权重和偏置常量组成,但由于加入了卷积层、池化层、全连接层,使得其对于二维形状,诸如图片、矩阵等有优秀的识别能力,故主要适用于模式识别领域。其结构大致如图13所示。
(www.xing528.com)
图13 卷积神经网络结构
在这道问题中,采用卷积神经网络主要是考虑到了对于多维度数据内部具有一定的非线性关系,各项属性之间存在深层关联性,其关联性对于目标值预测可能有一定的影响(污染物浓度),故以卷积的方式和增加网络深度来提取高维度的非线性特性,用以对于真实的目标函数进行逼近。
在卷积神经网络的实现上,主要依托Python的神经网络框架TensorFlow所提供的API,大致可分为以下几步:
(1)重构数据,为了方便卷积,将原数据补为16列,主要调用numpy库的组合工具。
values=np.column_stack([values_6,values[:,3:14]])
(2)调用sklearn的preprocessing.StandardScaler()方法对数据进行标准化处理:即各项减去平均值除以方差。
(3)定输入输出维度,并将长度为16的一组数据变为4×4矩阵。
xs=tf.placeholder(tf.float32,[None,16])
ys=tf.placeholder(tf.float32,[None,1])
x_image=tf.reshape(xs,[-1,4,4,1])
(4)第一卷积层,对数据加厚(每个像素转化成32像素)。
W_conv1=weight_variable([2,2,1,32])
(5)池化操作。
(6)第二卷积层,继续对矩阵加厚。
W_fc1=weight_variable([4*4*64,512])
(7)池化操作。
(8)全连接层。
W_fc1=weight_variable(4*4*64,512)
(9)设定学习率、损失函数、优化函数。
(10)激活TensorFlow的运算图,开始计算。
模型预测效果如图14~图16所示(实线为真实值,虚线为预测值)。
图14 石家庄春季PM2.5的CNN卷积回归对照图
图15 石家庄冬季NO2的CNN卷积回归对照图
图16 邢台夏季SO2的CNN卷积回归对照图
从图14~图16可看出,使用CNN卷积神经网络,回归时预测值虽变化幅度相较于前几个模型较为明显,特别是在真实值最值点附近,但变化趋势与真实情况存在出入,主要体现在波峰波谷的数量和位置上。
图17~图19为CNN卷积神经网络回归模型对石家庄春季PM2.5数据、石家庄冬季NO2数据、邢台夏季SO2数据回归分析后得到的相关关系图,其散点拟合曲线值代表相关性值,分别为0.413 2, 0.233 1, 0.565 5,均为正相关关系,预测值与真实值的相关性超出容忍范围(±1, ±0.4),明显在预测可靠性上比K近邻回归模型和Gradient Boosting回归模型差,这也与图14到图16的观测结果存在一致性。
图17 石家庄春季PM2.5的CNN卷积回归相关关系图
图18 石家庄冬季NO2的CNN卷积回归相关关系图
图19 邢台夏季SO2的CNN卷积回归相关关系图
3.3.4 RNN LSTM时间序列分析模型
RNN LSTM即长短时记忆神经网络,首先是作为RNN即循环神经网络,循环神经网络相较于其他类型的神经网络相比,具有输入输出不定长度(可以一对多、一对一、多对一、多对多分析,其他神经网络往往需要规范输入输出格式,如之前提到的CNN卷积神经网络),前后数据的关联性强(以一定长度步进在给定数据滑动,当前的计算结果依赖于之前“爬行的情况”),这些因素使得RNN非常类似于人类的记忆,也就天然适用于序列性的分析,而题目所要求的相邻天数的污染物浓度差值属于时间序列性分析,与RNN特性相符。
但传统的RNN的“记忆力”相对较差,对邻近数据的敏感程度要大于不相邻数据,但对于自然环境内的数据本身就具有长时间跨度的关联可能性,故在这里使用由RNN衍生出的LSTM长短时记忆神经网络模型。
图20 RNN到LSTM
由图20可见,相比较于传统的循环神经网络RNN,LSTM补充了输入门、输出门、遗忘门的控制器,此外在原短期记忆单元的基础上补充了长期记忆单元,使其可以记忆到之前相对“久远”的数据。公式如下:
Input Gates,Output Gates,在参数输入输出时候的起点,用于计算。Cells中的state参数用来记忆。Forget Gates:由于原始的LSTM在这个位置是一个值1,是连接到下一时间的参数,所以要进行选择性遗忘。
通过调用开源神经网络框架TensorFlow的相关API完成对LSTM神经网络的构建,结构图如图21~图26所示。
图21 LSTM神经网络结构图
对其进行5 000次迭代训练过程中,各参数变化如下(使用TensorBoard查看相应参数变化)。
可以看出,函数收敛速度很快,在最初20%(不到1 000次)的迭代中就几乎收敛完毕,且第一层精确性已几乎达到完备,第二层精确性几乎没有变化,这可能与数据量不充足有关系。
图22 损失函数变化
图23 第一层权重变化
图24 第一层偏置变化
图25 第二层权重变化
图26 第二层偏置变化
其预测效果如图27~图29所示(实线为真实值,虚线为预测值)。
图27 石家庄春季PM2.5的RNN LSTM对照图
图28 石家庄冬季NO2的RNN LSTM对照图
图29 邢台夏季SO2的RNN LSTM对照图
从图27~图29可看出,使用RNN LSTM神经网络回归时,预测值变化幅度和变化趋势与真实情况几乎一致。
图30~图32为RNN LSTM神经网络对石家庄春季PM2.5数据、石家庄冬季NO2数据、邢台夏季SO2数据回归分析后得到的相关关系图,其散点拟合曲线值代表相关性值,分别为0.9452,0.9781,0.9659,均为正相关关系,预测值与真实值的相关性极高(差距在0.1以下),其预测可靠性远远优于其余模型,这也与图27到图29的观测结果存在一致性。
图30 石家庄春季PM2.5的RNN LSTM相关关系图
图31 石家庄冬季NO2的RNN LSTM相关关系图
图32 邢台夏季SO2的RNN LSTM相关关系图
3.4 模型分析及优选
之前涉及的4个预测模型(K近邻回归模型、集成学习Gradient Boosting回归模型、CNN卷积神经网络回归模型、RNN LSTM神经网络时间序列预测模型)作用于对应的数据集(石家庄春季PM2.5,石家庄冬季NO2,邢台夏季SO2)得到相应的预测值,对其进行R2(决定系数)检验,得到表12。
表12 模型预测R2
综合以上分析(直接对照分析、相关关系检验、R2检验),得出对于该问题各个模型实际应用效果最好的为RNN LSTM时间序列预测模型,其次为集成学习Gradient Boosting回归模型、K近邻回归模型、CNN卷积神经网络回归模型,对于不同季节和地点,这三个模型实际效果又各有优劣,但均未超过RNN LSTM神经网络时间序列预测模型,故在季节性和地点性适用模型不再深挖。
对于这一结果分析可能的原因有:
(1)该数据集(各污染物及其对应的气象因子)本身是序列性的,在时间轴上前后有着关联性和周期性,在这一情况下,RNN LSTM神经网络时间序列预测模型相较于其他模型有着天然的优越性。
(2)从模型上来说,CNN卷积神经网络时间数据集矩阵化,对矩阵进行卷积处理和其他非线性处理从而发现高位特征;K近邻学习算法选取邻近样本进行投票式决策;Gradient Boosting回归模型是以树和节点的形式依次递进进行模型优化和结果预测,可见从模型本质上,CNN更注重个体特征,所以更常用来进行分类,K近邻包含一定的序列性但不够明显,Gradient Boosting回归模型相比前两个模型而言序列性更明确一些,所以对于该问题实际效果要优于其余两个模型,但弱于RNN LSTM模型。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。