, ,
(西安理工大学 自动化与信息工程学院,西安 710048)
随着计算机技术的飞速发展以及移动互联网科技的不断进步,网络已经渗透进人们生活的方方面面,与此同时互联网所产生的信息也发生了爆炸式的增长,随着智能电网的发展,电力数据资源急剧增长。以云计算为代表的新一代IT技术在电力系统中的应用更加广泛[1]。智能电网的主要目的就是通过获取更多相关信息来优化电能的生产、分配和消耗[2]。从本质上来说,智能电网是当今的大数据技术在电网系统上的具体应用。电网在实际的运行、检修和管理等过程中都将会产生海量数据,这些都是典型的大数据特点。由此可见,大数据技术即将成为我国智能电网未来发展的新方向[3]。
Hadoop是由Apache基金会开发的分布式系统基础架构,是一个大数据处理的框架,它能够部署在任何普通PC机上,并可以在多种平台上运行,具有良好的可靠性和可扩展性。Hadoop的分布式系统架构,既保证了数据的安全又有效缓解了运算时间过长等问题[4]。传统方式处理大规模数据时,大多选择高性能计算,硬件器材往往非常昂贵,并且对大规模数据进行有效分割以及计算任务的合理分配都需要经过开发人员繁琐复杂的编程才能实现,而Hadoop的HDFS(Hadoop Distributed File System)系统与MapReduce编程框架很好的解决了这些问题[5]。
本文将机器学习中的SVR算法[6]以及能够处理海量数据的Hadoop平台相结合并应用到电力负荷预测的领域中。针对传统算法面对海量高维数据时单机运算资源不足以及运算时间成指数级增长的缺陷,引入了MapReduce编程框架、HDFS分布式文件系统等分布式计算技术,通过改进负荷预测算法,以提高负荷预测算法的计算速度;使用基于均匀设计[7]的自调用SVR(UD-SVR)[8]方法进行参数寻优,在SVM算法中加入参数寻优[9]进一步提高预测算法的准确性。最后,通过实验验证了本文实现的Hadoop平台分布式SVR的算法性能与UD-SVR参数寻优方法效果。
HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写。HDFS是Hadoop的核心子项目[10]。HDFS具有很强的容错性,能够保证在一个或者若干个出现故障后,集群仍旧能够正常运行;它能够有效提高网络带宽的利用率,减少网络阻塞的风险;同时可以提供高吞吐量的数据访问。
在HDFS中文件的存储、处理和备份的基本逻辑单元是block(块),默认一个block的大小是64 M,每一个block都有自己的副本,默认副本数为3。节点冗余一般是通过拷贝来实现的。默认的3个副本的存储方式为,在同一个机架的不同节点,各保存一份,在不同的机架上再保存一份。这样的好处是,当本节点出现故障时,优先使用同一机架的另一个节点作为替代,原因是在同一个机架内带宽较大,速度较快;当整个机架出现故障时,使用保存在另一个机架上的备份,这样使得文件不会丢失。这样就使得HDFS既安全可靠有很高的容错性,又保证高效性,提高带宽利用率。
MapReduce是由主/从结构组成,即JobTracker与TaskTracker[11]。对大规模数据集进行复杂的并行化运算都可以抽象成map函数和reduce函数。具体的底层实现被封装起来了,用户只要自己编写map函数和reduce函数来实现功能即可。图2展示了一种MapReduce的操作过程,MapReduce中数据转换成如下键值对形式:
Input→Map(K 1, V1)→list(K2, V2)→Reduce(K2, list(V2))→list(K3, V3)→Output
首先,从HDFS中读取数据,数据被分割成数据split;其次,数据会被转化为key/value格式,MapReduce会为每一个map任务分配一个split进行并行运算;其中shuffle是一个map端的排序过程,最终reduce端以前对数据进行合并,再把reduce端输出的结果,保存到分布式系统所指定的位置。
短期负荷预测对电力系统的安全运营有着极为重要的作用,例如是制定阶梯电价的重要依据,对电网的安全经济运行提供了保证。本文所用的负荷数据来自我国西部某地级市2015年1月1日至2016年2月28日,共424天的真实用电量数据,一天24小时内,每15分钟采样一次,每天96个采样点,负荷的单位是兆瓦。其中2015年全年的历史负荷数据作为训练样本,将2016年的数据当做未知数据,对不同时间的负荷值进行预测。
在电力系统的负荷预测的角度,影响因素有很多,是一个多变量的预测问题[12],为了提高SVM算法的推广能力,需要兼顾各种因素。依据文献[13]和生活经验,t时刻的负荷量可以用下面的公式表示:
Y(t)=N(t)+W(t)+S(t)+r(t)
(1)
其中:Y(t)是t时刻的负荷总量,N(t)是受到历史负荷的影响所产生的负荷分量,W(t)是受到受到气象因素影响所产生的负荷分量,S(t)是受到特殊事件影响所产生的负荷分量,r(t)是不可控事件所产生的负荷分量。通过以下实验将讨论各个因素对负荷预测问题的影响。
它与天气、节假日等其他因素无关,主要指的是所预测地区养成的用电习惯,在负荷预测中有延续性和类推性的原则,也就是说,我们可以根据先前发生的事件来推测后续事件发生的趋势,从而对后续事件做出预测。
图1 每周的相似日负荷特性
图2 工作日与双休日的负荷数据特性对比
图1中,3月2日,9日,16日之间分别间隔7天,也就是说他们的星期属性相同,由于相隔时间较远以及气温等其他因素的影响,因此这3天的负荷值,在数值上差别相较于连续3天的差值更大,但是在波动的走势上却极为相似,也就是说连续几周内,星期属性相同的时候,负荷特性具有相似性。
图2中,3月5日至8日,共四天的时间内,包括连续两天的工作日,和连续两天的休息日。可以看出,连续两天的工作日,即5日和6日,它们的负荷量极为相似;连续两天的休息日,即7日8日,它们之间的负荷特性极为相似,同时,6日和7日两天虽然也是连续的时间,但是曲线之间的距离就相对比较远,也就是说工作日和双休日之间的负荷特性差别较大。因为历史数据对待预测的负荷值相关性很大,因此,历史数据是不可或缺的属性值。
由气象因素产生的负荷分量是W(t),影响负荷的气象因素有很多,比如温度、湿度、降水量等等,天气的突变会引起负荷的剧烈变化。在诸多气象因素中,温度对负荷的影响最为显著,在短期负荷预测中,将气温数据当做重要的属性考虑进去,早已成为人们在研究负荷特性时的共识。
当温度值一定时,负荷总会在一个特定的范围内变化,表明气温与负荷之间相关性很强。
在S(t)因素的作用下,将会导致负荷量明显偏离区域用电习惯的轨迹,特殊事件常指重大节假日、纪念日、电力系统限电、自然灾害等等。此类事件往往可以根据人为修正和优化模型中的属性得到改进。以2015年除夕和春节作为特殊事件为例,图3展示了除夕前后的负荷曲线。
图3 节假日与负荷的关系
图3中,2月18日是除夕,可以看出假期前的最后两个工作日,即16日和17日,它们的负荷特性类似,18日和19日,这两天假期的负荷特性相似,但是工作日和假期之间的负荷特性差别较明显,因此影响负荷的因素中还应该包括节假日因素。
在负荷L(t)中提取出N(t)、W(t)和S(t)后剩余的残差,即不可控因素r(t),它是随机负荷序列,这些随机序列因其随机性从而往往难以预测,因此很难把它们量化到属性值中。
综上所述,通过阅读资料和分析历史数据,最终将输入样本的属性值确定如下:
(1)自预测之日起前7天的同一个时间点的的负荷值:N1={n1,n2,......,n7}。
(2)自预测的时间点起最近的前7个时间点的的负荷值:N1={n8,n9,......,n14}。
(3)预测日的星期属性,0表示周内,1表示周末。
(4)预测日的特殊事件属性,0表示工作日,1表示特殊日。
(5)预测日的温度属性,W={Th,Tl},Th表示当日最高温度,Tl表示当日最低温度。
在大数据集情况下,单机SVR算法处理大数据集时耗时巨大,为了进一步提高分布式SVR训练精度,本文采用了UD-SVR方法进行参数寻优。在众多实验点中选取其中最具有代表性的若干个点,这些被选取的点以其在所有实验点中的“均匀分布”程度作为标准,均匀设计只考虑试验点在范围内的均匀散布[14],通过提高试验点“均匀分散”的程度,使试验点具有更好的代表性,能用较少的试验获得较多的信息[15]。
SVR算法有(c,g,p)三个参数需要优化选择,共有729组(c,g,p)参数,若将这所有729组全部进行SVR计算,则耗时巨大,可行性较低。本文用均匀设计法,从这729组参数中选择最具代表性的27组参数进行参数计算,得到的结果作为训练样本再利用SVR的预测功能对全部729组参数进行预测,最终预测结果中误差最小值所对应参数为最优参数,误差选择使用均方差MSE:
(2)
其中Y表示真实值,M表示实际值。
表1 27组参数SVR对应MSE
具体参数寻优步骤可分为:
(1)依据均匀设计表对729组参数进行27组参数的选择。
(2)对27组参数进行单机SVR的训练,使用5折交叉验证,得到的27组MSE。
(3)将27组MSE与27组参数组合为新的训练样本,使用留一法对729组参数进行SVR训练,得到的MSE最小值所对应的(c,g,p)即为新样本的最优参数。
(4)使用3中得到的最优参数重复3中实验,最后得到的MSE最小值所对应的(c,g,p)即为单机SVR的最优参数。
本节设计三组实验用来检验分布式SVR模型的预测性能,实验对比了包括训练时间、预测值与实际值的误差、训练加速度等,综合分析评判所建立的分布式SVR模型与单机SVR性能之间的差异。
对于训练时间的比较,首先选用不同大小的数据集(1万行,5万行,10万行,15万行,20万行),数据集大小从0.6 M至12 M,分别对单机SVR算法、分布式SVR算法进行训练预测模型时间的对比实验。实验结果如图4所示。
图4 单机SVR,分布式SVR训练时间
分析可知,在实验样本数据较少的情况下,Hadoop环境下由于存在一些集群的通讯协作开销和Reduce端的SVR训练,训练时间比单机训练时间长,随着训练样本的增大,单机SVR的训练时间呈指数级增长,而Hadoop平台分布式SVR训练时间增长斜率很小。
对于预测模型准确率的比较,训练数据选用原数据集中2015年一整年的数据,数据大小7.96 M占用Hadoop集群4个block块。选用2016年1月1日0时0分—2016年1月7日23时45分(共一星期)的672个数据点作为预测数据集,分别对单机SVR算法、分布式SVR算法进行预测实验。因篇幅有限,图5列出了前三天的预测效果图。
图5 4种曲线对比图
从图中可得使用默认参数的单机SVR与分布式SVR效果相似,而使用了参数寻优后的分布式SVR与真实值最为接近,效果最好。表2显示了使用平均相对误差(MAPE)和均方差(MSE)来衡量预测值与真实值误差。
表2 672个数据点平均相对误差、均方差
从中可以看到默认参数的单机SVR预测值稍好于默认参数的分布式SVR,经过参数寻优的分布式SVR的预测效果最优。
为了充分测试Hadoop平台的并行SVR算法的性能变化与集群中Map任务的数量的关系,本文采用了加速比来衡量该并行算法在训练时间上的提升速率。
计算加速比方法如下:
P=T1/T2
(3)
其中:P表示加速比,T1为单机SVR算法的训练时间,T2为Hadoop平台分布式SVR算法的训练时间。
实验结果如表3所示。
表3 加速比对比实验
当Hadoop集群中的节点为1个Map任务时,由于集群中的节点间的网络通讯和Reduce端的SVR训练,使得Hadoop平台的并行SVM算法的训练时间超过了单机SVR算法。然而,随着集群中计算Map任务数目的增加,并行算法的加速比逐渐提高。
本文在Hadoop平台实现了分布式SVR算法,在大数据集情况下,使用了UD-SVR方法进行了(c, g, p)参数寻优。通过3组实验对比了单机SVR和分布式SVR算法在训练时间和预测模型准确度上的效果。实验表明分布式SVR在保证准确度不明显降低的情况下大幅度缩短了训练时间,而使用了UD-SVR参数寻优后的分布式SVR的预测效果极佳。