-
长期以来,空气质量状况只能通过气象站点得知,况且空气质量受多种因素影响,所以在预测时不仅要考虑自身周边环境的影响,还要考虑空气质量指数自身的变化、随时间推移的变化趋势。本文对细粒度空气质量的时间预测器进行研究,目的是研究空气质量指数与时间的内在联系,并将其应用到预测中。
何晓飞等[1]总结了我国学者在机器学习等领域的部分研究成果,其中有很多对优秀的机器学习算法的总结。星敏感器在轨标定算法[2]结合了机器学习的预测建模思想,使得预测的效果提升较为明显。目前广泛应用的预测算法有随机森林[3]、回归树[4]、局部加权线性回归[5]、岭回归[6]、前向逐步回归[7]、高斯混合[8]以及神经网络[9]等。吴有训等[10]采用径向基函数神经网络进行短期的空气质量预测,该方法具有优秀的函数逼近能力和学习速度,但是存在结果收敛速度慢和容易陷入局部极小点等缺陷。
时间预测器是基于线性回归,并通过大数据来挖掘空气质量在气象影响下随时间变化的变化趋势,以相关的特征建立两者之间的线性关系,并使用Hold-out Validation或者Cross-Validation的方法进行验证评估[11]。此方法简化了预测过程,也提高了预测的准确性。
全文HTML
-
运用一个线性函数进行预测的过程就是建立模型的过程,模型建立后解决问题。即求解系数和误差的过程[12]。模型函数见式(1)。
式(1)中:xi为第i个特征的值;wi为xi对应的系数;
$h\left( x \right)$ 代表预测结果。假设有训练数据集D见式(2)。
式(2)中:Xi,Yi表示各横纵坐标的特征值。
对第i条数据进行预测,函数见式(3)。
式(3)中:xi为第i条数据里面的各特征值。
损失函数是一种评估成本或者损失的函数,定义损失函数的目的就是让求解模型函数系数时有的放矢,即找到的系数应该是让损失函数越小越好。函数式见(4)。
式(4)中:yi为真实值;
$h\left( {{x^i}} \right)$ 为预测值;M为总数据记录数,前面$\dfrac{1}{{2M}}$ 是一个方便分析的自定义常数;W为损失函数的系数。将上式用矩阵表示见式(5)。式(5)中:X、y分别为h(xi)、yi的矩阵,化简求导得式(6)。
式(6)中出现了求逆运算[13],常用的求逆方法有最小二乘法、梯度下降法。
求逆方法:最小二乘法最简单,但是效率是比较低的,本文不推荐此方法。
梯度下降法的流程如下:
1)对W赋值(可随机),或者使W为一个全0的向量;
2)改变W的值,使J(W)按梯度下降的方法进行减少;
3)梯度方向由J(W)对W的偏导数确定,由于求极小值,因此梯度方法是偏导数的反方向。结果见式(7)。
迭代更新的方式有2种:一种是批梯度下降,此方法结果能够不断收敛;另一种是增量梯度下降,此方法结果可能不断在收敛处徘徊。
-
本设计完成的是基于线性回归的空气质量预测的时间预测器模块,目的是预测一个气象站未来48 h空气质量指数的变化量。使用线性回归预测模型进行预测,基于3方面的数据:①过去2 h气质量指数和现在的空气质量指数;②当地的气象状况;③要预测最近的天气状况,首先获取到气象站一年内的空气质量,见图1。
当前时间自然界的不同状态对未来不同时间段的影响程度是不一样的。把输入数据(虚线矩形部分)分别和不同的时间段的空气质量进行匹配以规划出不同的训练集,见图2。
图2可见,前6 h中每个小时都有一个预测器,但是从第7~48 h被分成了3部分,每一部分都能预测出2个值,一个最大值,一个最小值。对于7~24 h的模型,有一种思路是,每个小时都建立一个模型,分别预测出每个小时的空气质量指数,取得最大值和最小值。但这种方法无论在结果数量上还是预测效率上都不够优秀。所以根据相邻时间点空气质量指数变化量不大的特点,挑取离散时间点(如7,9和12),这样就可以尽量覆盖到多个取值,使效率和准确度得到了均衡提高。
-
根据预测所需要的3类数据,用到的预测特征包括:过去2 h的空气质量指数;过去1 h的空气质量指数;当前时间的空气质量指数;当前时间以及未来时间的天气、气压、温度、风速及风向等状况。
由于要验证线性回归算法,考量一个特征是否真正的适合作为预测特征,最直观的方法是模拟该特征与污染物浓度是否呈现线性关系,特征选取过程见图3(a~g)。
图3(a~c)可见,过去时间的PM2.5浓度和当前时间的PM2.5 浓度都与未来 1 h的PM2.5浓度呈正相关,空气质量变化是连续的。由图3d可见,当天气不是强对流天气时,未来1 h浓度的最大值接近400;而天气取值在5~13 h,浓度的最大值在300左右;当天气数值再增大时,很明显浓度的范围再次增大,不存在线性关系,可以放弃该特征。天气和浓度的线性关系表现差的原因可能是天气的离散化表示,因为天气在数据中的表示采用的是离散数值,这样的表示方式一方面会降低天气描述的准确性,另一方面会让天气对浓度造成的影响不能以线性的关系体现。
图3(e~g)分别反映了当前时间的温度、湿度和风速在未来1 h的浓度关系,除了噪声点外,温度和风速与浓度呈现负线性相关,温度与浓度呈正线性相关。
所以最终确定选取的特征为:过去2 h和当前时间的浓度,当前时间本地的温度、湿度、风速,预测时间的温度、湿度和风速。
使用随机森林中数据降维和特征选择的方法[14],借助随机森林来验证或者量化一些特征的重要性。其中主要实现代码(Python语言)为:
Feature, targer = data[[‘temperature’, ’humidity’, ’wind_speed’, ‘next_temperature’, ’next_humidity’, ’next_wind_speed’]], data[next_PM25]
ss = RandomForestRegressor().fit(feature, targer)
其中data为输入,每条记录是由各个特征值和未来1 h的浓度组成,输出为每个特征的重要性。
1.1. 线性回归预测的原理
1.2. 建立模型
1.3. 特征选择
-
在确定了特征和建立模型之后,最后的工作就是要对模型进行评价,采用K折交叉验证的方式[15],将全部数据分为K份,先选择其中1份作为测试集,其他k−1份作为训练集,进行训练和验证,同样的过程循环k次即可。
实验选取3折交叉验证,准确率通过取其平均值得到,见图4。红色线是浓度的真实值,蓝色线是浓度的预测值。
用准确率函数score计算得到准确率为0.908 5,其中score返回的是该次预测的R2系数。方法见式(8)。
式(8)中:
${\hat y_i}$ 为预测值;yi为真实值;$\bar y$ 为真实值的平均值;M为数据量。每一段都要预测一个最大值和最小值,求出平均值
$\hat m$ ,在求出这段区间的真实值的平均值m,计算准确率方法见式(9)。同时,每个时间段还要计算误差[11],见式(10)。
分别对未来的1,2,3,4,5,6,7,9,12,13,18,24,25,36,48 h建立模型进行预测。每个小时预测的准确率情况见图5。
实验结果表明,天气是由大自然千万种变化因素综合影响的,我们只抓住了几个最重要的特征进行预测,难以保证准确率达到100%。在预测未来5 h以内的空气质量变化时,准确率能够保持在90%以上。实验选定的是预测未来48 h内的变化,由图5可见,准确率即使在减小,依然能达到75%,表现良好。
-
为了实现对空气质量的预测,在选定的主要特征条件下,对空气质量变化做进一步研究,经过Cross-Validation方法、准确率函数score并将误差考虑在内,对线性回归方法进行评估验证,预测结果能够达到应用的标准。因此,空气质量由温度、湿度和风速这3个主要特征共同影响,为空气治理与预防提供了参考,具有现实意义。水源如同大气一样也是我们赖以生存的条件,借此方法,还可以选定水质的预测特征,对水质在未来的变化趋势做一个预测,为水质的预防和治理提供参考。