1、一种基于 Spark 和聚类分析的辨识电力系统不良数据新方法 孟建良 刘德超 华北电力大学控制与计算机工程学院 摘 要: 随着电力系统智能化建设的不断深入和推进,电力系统数据呈现海量化、高维化的趋势。针对电力系统中的不良数据将导致电力系统状态估计结果的准确性降低,而传统聚类算法处理海量高维数据时单机计算资源不足,近年来较流行的Map Reduce 框架不能有效处理频繁迭代计算等问题,提出一种基于 Spark 的并行 K-means 算法辨识不良数据的新方法。以某一节点电力负荷数据为研究对象,运用基于 Spark 的并行 K-means 聚类算法提取出日负荷特征曲线,分别对输电网状态估计中的不良
2、数据进行检测和辨识。选用 EUNITE 提供的真实电力负荷数据进行实验,结果表明此方法能有效提高状态估计结果的准确性,与基于 Map Reduce 框架的方法相比,具有更好的加速比、扩展性,能更好地处理电力系统的海量数据。关键词: Spark; 聚类; K-means; 电力系统; 不良数据; 负荷曲线分类; 作者简介:孟建良(1956-),男,教授,硕士研究生导师,研究方向为电力信息化、人工智能及应用;作者简介:刘德超(1988-),男,硕士研究生,研究方向为电力信息化、云计算及数据挖掘。E-mail:收稿日期:2015-04-05A new method for identifying b
3、ad data of power system based on Spark and clustering analysisMENG Jianliang LIU Dechao School of Control and Computer Engineering, North China Electric Power University; Abstract: With the development of intelligent power system construction, power data shows a massive and multi dimensions trends.
4、The bad data in power system reduces the accuracy of the estimation results in the state of the power system, computational resources of the traditional clustering algorithms dealing with massive high dimensional data with single machine are insufficient, and the Map Reduce, more popular in recent y
5、ears, cannot effectively deal with frequent iteration calculation problem. According to the above, this paper puts forward a new method of identifying bad data with parallel K-means algorithm based on Spark. To a certain node load data as the research object, the parallel K-means clustering algorith
6、m based on Spark is used to extract daily load characteristic curve, to detect and identify bad data in state estimation of power transmission network respectively. Experiments are conducted with the data of the real load provided by EUNITE, the results show that this method can effectively improve
7、the accuracy of state estimation, and compared with the method based on the Map Reduce, it has better speed-up ratio, scalability, and can better process massive data in power system.Keyword: Spark; clustering; K-means; power system; bad data; load curve classification; Received: 2015-04-050 引言随着智能电
8、网的迅速发展,电力系统的数据呈指数级增长,其结构和运行模式也越来越复杂,因此对系统运行的可靠性、安全性和稳定性也就提出了更高的要求1-3。电力系统状态估计是电力系统信息管理系统中一个重要的组成部分4。由于客观原因,除了正常的数据噪声,各信息采集单元所获取的测量数据不可避免会有不良数据。不良数据的存在会在不同程度上使电力系统状态估计结果失真,从而不能准确得到系统真实的运行状态,可能会引发未知的安全后果。因此,对不良数据进行检测和处理就显得尤为重要5-6。传统不良数据检测方法取得了大量成果,但仍有不少问题未得到妥善解决。现今对电力数据进行分析和分类控制时,前期处理大多用的是神经网络法和聚类分析法等
9、。文献7运用基于蚁群优化算法的负荷序列聚类分析,提高了对外部气象等因素的敏感性,对负荷曲线轮廓相似性具有更细致的聚类性能,但聚类时间较长;文献8将模糊聚类技术与人工神经网络中的 BP 网络相结合,通过 C 均值模糊聚类方法实现不同用户日负荷曲线的分类;文献9提出一种基于传统 K-means 聚类算法并结合有效指数准则的不良数据检测和处理方法,但收敛速度慢且易陷入局部极小。为了提高处理海量数据的能力,文献10在 Hadoop 云平台下,建立并行局部加权线性回归模型,并采用最大熵建立坏数据分类模型。然而这些算法几乎都是通过大量的频繁迭代来实现,算法复杂度相当高。尽管传统串行算法可以对电力负荷数据进
10、行聚类,但单机的计算资源依然无法满足算法在处理海量高维数据时大量的资源消耗;而基于 Map Reduce 的算法能处理海量数据,却不能有效处理频繁迭代计算。随着电力系统智能化建设的不断深入,对不良数据的处理有了更高的要求,云计算的出现,为更准确地进行不良数据的检测与辨识提供了可能11-12。围绕上述问题,对输电网状态估计中的不良数据进行识别和纠正,以提高状态估计的准确性。以某个节点的历史负荷数据为研究对象,在云集群环境下,利用基于 Spark 的并行 K-means 算法对该节点的负荷数据进行聚类,提取出日负荷特征曲线;通过与特征曲线对比,辨别和处理不良数据。通过在实验室搭建的 Hadoop和
11、 Spark 云集群,并采用真实电力负荷数据进行算例分析,验证基于 Spark 平台的方法得到的状态估计结果准确性优于基于传统 K-means 聚类的方法9,与传统 Hadoop 平台相比,具有更好的加速比、扩展性,能更好地满足处理电力系统海量数据的需求。1 基于 Spark 改进的 K-means 并行算法1.1 传统 K-means 算法传统 K-means 算法13-14的基本思想:首先从 N 个数据对象中随机初始化 K 个聚类中心;对于剩下的其他对象,计算其与 K 个聚类中心的距离,分别将其分配给与其距离最近的类簇;然后再计算每个类簇新的聚类中心,即该类簇中所有对象的均值;不断重复这一
12、过程直到标准测度函数开始收敛为止。一般都采用簇内误差平方总和作为标准测度函数,其定义为其中:K 为簇的总数; i为簇 Ci的平均值。1.2 基于 Spark 改进的 K-means 并行算法1.2.1 Spark 架构和弹性分布式数据集 RDDSpark 由加州大学伯克利分校 AMPLab 开发,由于引进了弹性分布式数据集(Resilient Distributed Dataset,RDD)15的概念,Spark 可在集群计算中将数据集分布式缓存在各节点内存中,省去大量的磁盘 IO 操作,从而大大缩短访问延迟。作为 Spark 架构的核心机制,RDD 是一种基于分布式内存的并行数据结构,它能将
13、用户数据存储在内存,并控制分区划分以优化数据分布。数据存储在内存中,尤其对于需要多次迭代使用的数据,省去了多次载入到内存和存储到磁盘的过程,大大加快了处理速度。Spark 还支持 RDD 的显式缓存(cache)及持久化(persistence)存储。Spark 运行架构如图 1 所示,Spark 应用在集群上以独立的执行器(executor)运行在不同节点,在主程序中以 Spark Context 对象来进行总体调度。Spark Context 可以与三类集群资源管理器(Standalone、Mesos 或者 YARN)相连接,集群资源管理器的作用为在不同 Spark 应用间分配资源。Spa
14、rk 在执行程序时,需要将应用代码发送给工作节点(worker node)的执行器去执行任务(task),以尽可能实现数据的本地化计算。图 1 Spark 运行架构 Fig. 1 Spark running architecture 下载原图1.2.2 改进 K-means 算法思想传统 K-means 聚类算法属于聚类中一种基本的划分方法,具有简单、快速的优点。然而这种算法对初值的依赖性很强,初值选取的不同往往导致聚类结果相当不稳定。其次,当初始聚类中心选择不当时,算法极易陷入局部极小点;并且容易受“噪声”数据的影响。其复杂度由 O(TKN)表示,其中 K 是期望的聚类簇的个数,T 是迭代次
15、数,N 是数据对象的个数;则其并不能适合处理海量数据。因此考虑用最大最小距离法来优化初始聚类中心。当最大最小距离法处理的样本规模为 N,每次寻找新的聚类中心时,很明显要进行 N 次距离计算。若共找到 k 个聚类中心,则算法结束时共进行的计算次数为N。最大最小距离法的计算量取决于 N 的规模,直接将最大最小距离法作用于原始数据集的执行效率很低。考虑到数据集合本身的规律性以及算法的适用性,因此将其与抽样技术相结合。初值优化流程图如图 2 所示。图 2 初值优化流程图 Fig. 2 Flow chart of initial value optimization 下载原图首先对原始数据集进行多次随机
16、抽样,然后基于 Spark 运用两阶段最大最小距离法以产生最佳初始聚类中心,最后再用基于 Spark 的并行 K-means 算法进行聚类。因此,此算法的处理流程为:多次随机抽样、最大最小距离法搜索出最佳初始聚类中心、K-means 迭代处理。该算法通过优化 K-means 算法中初始聚类中心,获得更准确的负荷特征曲线;利用 Spark 并行计算框架实现并行化,克服无法处理海量电力数据的问题,最终实现精确高效的电力负荷曲线分类。1.2.3 基于 Spark 的改进 K-means 算法并行化实现利用 Spark 并行实现 K-means,总体上也是采用“map”“reduce”的思想,即在每次
17、迭代中,先用“map”计算所有样本和中心点距离并归类,再用“reduce”分类求均值算得新的中心点。然而与 Hadoop 的 Map Reduce16最大的不同是,Spark 对所有中心点的所有次迭代运算都是在内存中对 RDD 计算完成,中间不需要与磁盘交互,而 Hadoop 的这个过程则要与磁盘有 n (迭代次数分类数)次的交互。基于 Spark 的改进 K-means 算法实现如图 3 所示。基于 Spark 的 K-means 算法并行化实现分两部分。第一部分,首先读取 HDFS 的文件(已经预处理过的文件)并创建新的 RDD,并在本地执行 Cache 操作缓存 RDD数据。之后多次随机
18、抽样产生 J 个抽样样本,在 Map 过程利用最大最小距离法在本地产生若干初始聚类中心集合, 然后在 Reduce 过程将这些初始聚类中心集合汇总,再次调用最大最小距离法得到最佳初始聚类中心集合。第二部分,通过Map 操作执行局部数据的聚类,Reduce 操作执行汇总局部数据的聚类,计算全局的聚簇。聚类算法的并行化执行是由 Spark 内核调度完成,内核会根据工作节点数目,自动将数据集及执行任务分配到不同节点,继而多个计算节点会并行执行聚类计算。图 3 基于 Spark 的改进 K-means 算法流程图 Fig. 3 Flow chart of improved K-means algori
19、thm based on Spark 下载原图与 Hadoop 相比,新一代并行计算架构 Spark 的最大优势是以 RDD 内存计算为核心,即将迭代计算的数据块定义为 RDD,以分区(Partitions)的形式分布存储在不同节点的内存中,再由位于这些节点的 Tasks 针对本地内存 Partitions 重复完成迭代计算即可,中间完全无需和磁盘进行交互。2 基于并行 K-means 聚类的负荷特征曲线提取以一个节点一天 24 小时所测量的负荷数据为纵坐标,以该天各个测量时刻点为横坐标,得出该天的负荷曲线。不良负荷数据在这里特指某个或多个时刻点的负荷值偏离正常值过多。要辨别一条曲线上的某个数
20、据是否为不良数据,需要一个正常数据作为参考,这个参考标准就是负荷特征曲线。相邻几天内的负荷曲线是类似的,下面就是根据曲线的相似性来检测和处理不良数据。为了方便论述,这里定义几个概念。定义 1 一天中连续 m 个时间点上测量的负荷值连成的曲线称作负荷曲线,记为Ki=(xi1, xi2, ,xim),ik 为第 k 个测量时间点,x ik为第 k 个测量时间点的负荷值,k=1, 2, , m。则一条负荷曲线即为本文算法中的一个样本。负荷曲线的相似性是辨别和处理不良数据的关键。以直角坐标为参考,纵向相似性特指相邻几天内的负荷曲线的形状是类似的,这里以曲线间的距离来表征。定义 2 负荷曲线 Xi和 X
21、j的距离即两条曲线的距离就是两条曲线上各个测量点上的负荷值差中的最大值。距离Dij越小,则曲线 Xi和曲线 Xj的相似度就越高,反之则相似度越小。相似精度在一定范围内的曲线归为一个曲线类,也就相当于用本文算法聚类后的一个结果类;这里也把这个范围叫做相似精度。定义 3 记曲线类 C 为(X 1, X2, ),其中,X i(xi1, xi2, , xin)。曲线类 C 的相似精度为最后给出质心的概念,也即负荷特征曲线。定义 4 曲线类 C 的质心为定义 5 定义曲线 Xj和曲线类 C 的距离为曲线 Xj到质心 的距离负荷特征曲线的提取本质上就是求取各个曲线类的质心。不良数据的产生是偶然的,在所有的
22、数据中所占比例极小,因此它对质心的求取影响也是极小的。要辨别出不良数据首先得辨别出不良数据所在的负荷曲线。正常负荷曲线模式也即负荷特征曲线,要将不正常的负荷曲线提取出来,可以转化为求取到负荷特征曲线也即质心的距离大于某个阈值的负荷曲线。本质上来说,这就是数据挖掘中的聚类分析问题。聚类分析可以将负荷曲线集分成若干个曲线类。根据定义 1,负荷曲线的横坐标由各个测量时间序列组成,X i=(xi1, xi2, , xim),每个时间点 xik就是一个属性。显然,这是一个 m 维的样本。将所有这样的样本作为本文算法的输入,设定阈值相似精度。正常天气情况下,工作日,周末和节假日的用电负荷显然是不同的。对于
23、配电网来说,即便是同样的日期,不同用户(如居民用电,企业用户和商业用电)的负荷曲线显然也是不同的,因此本文算法中的 K 取值肯定是大于等于 2 的。因为数据来源和篇幅限制,本文只讨论输电网状态估计中的不良数据处理。3 基于负荷特征曲线的不良数据处理假设某个曲线类 C 提取出来的负荷特征曲线为 Xt,待检测负荷曲线为 Xi=(xi1, xi2, , xim)。从模式识别的角度,辨别含有不良数据的负荷曲线就是计算待检测负荷曲线 Xi与负荷特征曲线 Xt的距离 Dti,观察其是否在设定的 Dti内。如果距离在 Dti内,则该待检测负荷曲线便属于正常负荷曲线模式。否则,该待测负荷曲线即为非正常负荷曲线
24、。假设待检测负荷曲线 Xi中的负荷值与负荷特征曲线相应位置的负荷值的差值超过预定范围,则可确定该时间点即为不良数据的具体位置。设 Xi=(xi1, xi2, , xim),m 为一天中的采样时刻点数。对于采样时间点 k,Xt和 Xi对应的负荷值分别为 xtk和 xik,则 Xi相对于负荷特征曲线 Xt的负荷变化率为 (k)=(x ik- xtk)/xik100%。根据运行该算法时所设定的阈值计算出该曲线类 C 历史上该点的负荷变化率的范围,若 (k)在这个范围内,则为该点为正常数据,反之为不良数据,并且 k 点也是该不良数据的具体位置。判定某一个时刻点的数据为不良数据后,可以根据提取出来的特征
25、曲线进行不良数据的修正。由于从曲线集中提取出来的特征曲线不止一条,在修正之前必须正确找到对应的特征曲线。每条特征曲线就是一个质心,每个质心对应一个曲线类,只要找到离待检测负荷曲线正常数据点距离最近的质心,该质心就是所对应的特征曲线。再以该特征曲线为基准进行修正,具体的修正公式为式中:X d为待检测负荷曲线;X c为修复好的负荷曲线;X t为特征曲线;p 到 q 是 Xd上的不良数据。该方法主要是利用负荷曲线的横向相似性,将特征曲线对应位置的值平移嫁接到待检测曲线上。4 实验与算例分析4.1 实验环境实验平台配置为 10 个服务器节点,每个节点均为双核、4 GB 内存的 PC;其中一台作为 ma
26、ster,其他 9 台作为 slaves;每个节点操作系统均为 Linux Ubuntu12.04 desktop;Hadoop 版本为 2.2.0,Java 开发包为 JDK1.6 版本,Hadoop 程序使用 java 编写;Spark 版本为 1.0.2,scala 版本为 2.9.3,Spark 程序由 scala 编写。电力负荷数据采集自 SCADA 系统,由于客观原因,各信息采集单元所获取的测量数据不可避免会有不良数据,且具有偶然性、分布不确定性。验证该方法检测和辨识不良数据的实用性,算例分析数据集选用欧洲智能技术网络(European Network on Intelligent
27、 Technologies,EUNITE)组织的中期电力负荷预测竞赛提供的某地区 1997、1998 年真实负荷数据17。以其中 1997 年 1 月至 12 月每天 24 点的实测负荷数据为研究对象,一共 365 天的负荷数据,其日负荷曲线如图 4 所示。图 4 日负荷曲线 Fig. 4 Daily load curve 下载原图实验分别在 Hadoop 和 Spark 集群平台上进行测试,共进行了 2 类实验:(1) 基于 Spark 平台的状态估计结果准确性测试;(2) 基于 Hadoop 和 Spark 平台的并行 k-means 算法加速比、扩展率测试。4.2 算例分析4.2.1 状
28、态估计结果准确性本实验将基于 Spark 的并行 K-means 算法与传统 K-means 算法7进行比较,测试本文算法的状态估计准确性及收敛速度。为了测试该方法能否对出现在同一日连续时段内的多个不良数据进行准确辨识,以上面数据集为研究对象,人为设置一些不良数据点。将 3 月 10 日的第12、13、14 点原始数据 652、643、638 分别增加 60%的误差,变为 1 043.2、1 028.8、l 020.8,并对含有这三个不良数据的数据集分别用两种方法进行聚类,这样就得到两组特征曲线。则 3 月 10 日对应的日负荷曲线与两组日负荷特征曲线分别如图 5、图 6 所示。其中粗线表示
29、2 月 10 日负荷曲线对应的特征曲线。第 12、13、14 点数据在两种方法下的负荷变化率分别为:40.46%、39.09%、39.44%、40.01%、38.65%、39.18%,这几个变化率均不在正常范围内,则被认定为是不良数据。应用式(2)对这些不良数据进行修正,两种方法下修正后的数据与其实际值的误差百分比及两种方法的收敛速度见表 1。图 5 传统 K-means 算法下日负荷特征曲线 Fig. 5 Daily load characteristic curve with the traditional K-means algorithm 下载原图图 6 基于 Spark 的并行 K-
30、means 算法下日负荷特征曲线 Fig. 6 Daily load characteristic curve with parallel K-means algorithm based on Spark 下载原图表 1 基于 Spark 的并行 K-means 算法和传统 K-means 算法两种情况下的误差百分比及收敛速度 Table 1 Error percentage and convergence rate of two methods 下载原表 测试两种方法的收敛速度,即各自完成聚类需要的迭代次数。由表分析可知,基于 Spark 的并行 K-means 算法下修正后的数据和实际数据
31、更接近,误差百分比更小,迭代次数更少,状态估计结果的准确性及收敛速度优于基于传统 K-means 聚类的方法。因此可知,本文方法为输电网状态估计提供了相对精度高的量测值,降低了不良数据的影响,加快了收敛速度,确保了电力系统安全运行的可靠性。4.2.2 加速比、扩展性加速比是指通过并行计算使运行时间减少所获得的性能提升,它是衡量并行计算性能的一个重要指标,其计算公式为 Sd=Ts/Td,其中 Ts表示串行算法(即在单节点上)计算所消耗的时间,T d表示并行算法(即在 d 个相同节点上)计算所消耗的时间。加速比越大,表明并行计算消耗的相对时间越少,并行效率和性能提升越高。将 EUNITE 提供的负
32、荷数据样本人工扩充为原数据集的 1 000 倍、2 000 倍、4 000 倍不同大小的数据集,分别在单机环境、Hadoop 和 Spark 云集群节点数为2、4、6、8、10 的平台上运行,从而完成加速比和扩展率的对比。由图 7 可知:随着云集群节点数增加和数据集增大,基于 Hadoop 和 Spark 平台的加速比越高,且基于 Spark 平台的加速比要优于 Hadoop 平台的。分析可知,当数据量足够大,单机无法处理的时候,集群并行化能有效地提高算法的计算速度。在实际应用中,尤其对于大数据集时,并行计算的效果越明显,即满足电力系统海量高维数据的负荷分类的性能需求。图 7 Hadoop 和
33、 Spark 平台下的加速比 Fig. 7 Speedup on Hadoop and Spark platform 下载原图扩展比表示并行算法执行过程中集群的利用率情况,其公式为 J=Sd/d,其中 Sd表示算法的加速比,d 表示计算节点数。若可扩展比越高,则平台和并行算法的扩展性越好。由图 8 可知,随着数据集增大,并行算法的扩展比曲线下降速率相对趋缓,且随着节点数增加整体趋于平稳。这说明在 Spark 平台下,随着数据量的增大和节点数量的增多,其扩展比逐渐趋于稳定,所以基于 Spark 的并行 K-means 算法有较好的可扩展性,能够应付电力数据规模的不断扩大,保证了程序的高可靠性。图
34、 8 Spark 环境下的扩展比 Fig. 8 Scaleup on Spark 下载原图5 结论本文提出了基于 Spark 和聚类分析的辨识不良数据的新方法,将抽样技术和最大最小距离法引入到传统 K-means 算法中,克服了收敛速度慢且易陷入局部极小等问题;并结合 Spark 并行计算模型,解决了海量高维数据的计算量问题。通过对电力负荷数据的算例分析和实验,表明该方法效果良好,提高了电力系统状态估计结果的准确性及收敛速度,且具有更好的加速比和扩展性,满足了电力系统处理海量高维数据的需求,在保证电力系统状态估计准确性方面具有十分重要的应用价值。参考文献1张东霞,苗新,刘丽平,等.智能电网大数
35、据技术发展研究J.中国电机工程学报,2015,35(1):2-12.ZHANG Dongxia,MIAO Xin,LIU Liping,et al.Research on development strategy for smart grid big dataJ.Proceedings of the CSEE,2015,35(1):2-12. 2王建华,张国钢,耿英三,等.智能电器最新技术研究及应用发展前景J.电工技术学报,2015,30(9):1-11.WANG Jianhua,ZHANG Guogang,GENG Yingsan,et al.The latest technology re
36、search and application prospects of the intelligent electrical apparatusJ.Transactions of China Electrotechnical Society,2015,30(9):1-11. 3高志远,姚建国,郭昆亚,等.智能电网对智慧城市的支撑作用研究J.电力系统保护与控制,2015,43(11):148-153.GAO Zhiyuan,YAO Jianguo,GUO Kunya,et al.Study on the supporting role of smart grid to the construction of smart cityJ.Power System Protection and Control,2015,43(11):148-153.