何 彪
(一汽-大众汽车有限公司佛山分公司,广东 佛山 528200)
电网调控一体化向智能方向发展下,电力监测系统的结构越来越多样化。状态监测数据的复杂性使得电力系统的故障监测难度增大、效率降低,这对极端天气状况下的井喷式报警数据的处理提出了挑战。另一方面,电网系统对数据的实时性要求很高,这对数据处理系统的计算能力提出了更高的要求[1-3]。随着大数据处理技术的高速发展,并行分布式处理算法相比于传统简单的串行计算方法,能为数据计算能力的提升带来更大的帮助,而流处理平台可以极大地提高数据质量的实时性[4-5]。大数据技术用于电力设备的故障诊断不仅是电网企业智能化管理的发展方向之一,还为电网企业的业务拓展增值提供了条件[6-8]。本文针对突发情况下电网系统大量实时数据处理困难的问题,提出了基于Spark大数据计算平台的Xgboost算法模型,对电力设备的实时故障诊断进行研究。
表1 不同类型变压器故障产生的气体
行状态的判断依据[13]。
Apache Spark是利用内存进行计算的大数据计算框架[5]。除此之外,Spark计算框架以MapReduce进行迭代计算,大大地提升了运算效率[3]。图1所示的Spark体系架构主要包括数据源、资源管理模式和丰富的API开源工具,并且支持多种数据来源,以及Java、 Scala和 Python 3种语言。这种设置增加了Spark的易学性,缩短了开发周期。
图1 Spark体系架构
在Spark框架中,弹性分布式数据集(resilient distributed dataset,RDD)是计算和存储数据的关键。对RDD的处理操作有Action和TransFromation两种类型,其中TransFromation用于转换RDD,Action用于后续操作。图2所示为Spark数据处理流程,在进行数据操作前,需要将RDD读入转换。Spark创建的两类RDD处理算子中,TransFroma-tion算子可分为key-value和value两类;Action算子包括collect算子、count算子和saveAsTextFile算子。
图2 Spark数据处理流程
决策树分类器通过计算信息增益选择最佳分裂属性,其在实际应用中,存在数据预处理能力较差、数据处理过拟合等问题。
随机森林分类器首先对训练数据集进行随机抽样,然后通过组合分类器进行子数据集决策树的训练,最后以投票的方式确定分类训练的结果。传统随机森林虽然由很多弱分类器组合而成,但是非分布式平台不能体现出它的可并行性。基于Spark并行框架的随机森林,在数据储存方式上进行分布式设计,对传统随机森林的缺点进行一定程度的改善。通过对原始数据集随机抽样,可以保证决策树构建的随机性和独立性,也使得随机森林可以并行计算。
(2)若有空,则提示用户输入完整;若均已输入,则系统检验该用户名和密码是否已被注册,即遍历用户表查询是否有相同信息,若有相同记录则提示用户登录成功,否则输出相应结果,即用户名、密码不存在,跳转至菜单界面。
原始的电力系统故障数据具有连续性的特点,这不利于模型后续的数据分类操作。本文采用三比值法对数据进行离散化处理,并以《变压器油中溶解气体分析和判断导则(DL/T 722—2014)》作为判断标准。图3为基于Spark框架的随机森林并行设计。在Spark集群上,首先采用三比值法对DGA数据进行离散化处理,并将处理后的数据作为初始输入,对决策树进行训练;其次采用Boosttrap进行随机抽样;再次根据子数据集构建并行的子决策树;最后进行测试集的分类处理。
图3 基于Spark框架的随机森林并行设计
图4为对测试集进行故障诊断的过程。结合2.1节可知,基于Spark的随机森林变压器故障诊断模型包括两个部分:一是对测试集的数据处理,二是对算法训练数据集的数据训练。在这里需要注意,对原始DGA数据应采用三比值法进行预处理,并将处理后的数据作为输入数据读入RDD,以TransFromation算子进行数据转换处理。在随机森林的决策树集群构建完成后,根据训练数据集,对测试数据集进行分类处理。在数据量大的情况下,可以利用Spark框架的并行化优势,对数据集进行离散化处理。测试数据集的分类结果投票也可以采用并行方式进行。在每个测试集的投票结果完成后,对所有的投票结果进行全局统计。
图4 测试数据集并行变压器故障诊断
Xgboost算法是基于GBDT(gradient boosting decision tree)算法和AdaBoost算法演化而来的提升算法。在这一算法中,参数、模型和目标函数三者为机器学习算法的过程,权重组合和基函数为模型,模型中的未知变量表示为参数。Xgboost算法的参数类型分为学习任务参数、通用类参数和Booster参数,其中Booster参数可以设置为线型模型或树型模型。本文以模型预测稳定性和准确率作为构建模型的评价指标,因此优化模型可以通过提高模型稳定性或者准确率实现。模型的目标函数obj(θ)可由式(1)表示。
obj(θ)=L(θ)+O(θ)
(1)
式中:L(θ)为误差损失函数;O(θ)为模型复杂度函数。模型优化的最终目的就是使得误差惩罚项和误差损失函数达到最小。Xgboost算法是一种增强学习和并行算法,由许多的弱分类器组成。在电力故障诊断分类中,以回归树作为其基分类器,每一次叠加的模型为拟合上一次模型后产生的残差,因此决策树模型从算法模型上解释是一种假发模型,如式(2)所示。
(2)
式中:fM(x)为基函数;T为决策树;x为输入属性特征;θm为决策树路径,其中m为弱分类器数量,即迭代次数;M为总迭代次数;T(x,θm)为第m轮的模型预测值。误差损失函数代表模型预测值和真实值之间的差异,如式(3)所示。
L(y,y)=L(y,fm-1(x))+T(x,θm)
(3)
式中:L(y,y)为误差损失函数,其中y为模型预测值;L(y,fm-1(x))为第(m-1)轮预测结果和真实值之间的误差损失函数。
利用叶子节点的权值和数目正则化表示模型复杂度函数,如式(4)所示。
(4)
式中:φ(θ)为模型复杂度;γ为复杂度系数;T1为树中叶子节点数量;λ为惩罚项参数;W为每个叶子节点的权值。由综合模型复杂度函数和误差损失函数,可以得到目标函数如下:
(5)
式中:l(yt,yi)为第i个样本的预测误差,其中yt为样本的估计值,yi为样本的真实值。
通过引入梯度下降公式可以求解分类器目标函数的最优解,在梯度下降的优化下可确定树的每个节点权重和各个子节点。然而Xgboost算法是由众多弱分类器组成的组合分类器算法,梯度下降法优化就显得非常繁琐复杂。此时利用泰勒二阶展开的方法,可以让Xgboost算法具有普适性。目标函数加入泰勒二阶展开后用式(6)表示。
(6)
(7)
结合上述定义,目标函数可以用式(8)表示。
(8)
式中:ft(xi)为决策树模型的一个子模型;Ω(ft)为正则项,可用于控制训练树模型复杂度。
在Xgboost算法中,将树进行公式化定义,则树可以用式(9)表示。
ft(x)=ωq(x),ω∈RT1,q∶Rd→{1,2,…,T1}
(9)
式中:ω为叶子的权值;q为树的结构。定义树的复杂度函数以式(10)表示。
(10)
(11)
式中:Ij为所有回归树模型构建的函数空间;q(xi)为特征向量xi映射至决策树叶子节点索引的函数;Gj为存在节点j的样本的一阶偏导数和;Hj为存在节点j的样本的二阶偏导数和。
根据定义,可以得到目标函数的表达式:
(12)
根据求根公式可得:
(13)
在选择分裂节点时,需要建立一颗空树。以所有的叶子节点作为需要尝试分裂的分裂点,将分裂点代入,则目标函数可以表达如下:
(14)
式中:Gain为增加新分裂点之后的目标函数;GL为左子树样本的一阶偏导数和;GR为右子树样本的一阶偏导数和;HL为左子树样本的二阶偏导数和;HR为右子树样本的二阶偏导数和。
与其他算法相比,Xgboost算法有以下几点优势:1)Xgboost算法对于树型和线型分类器模型均具有良好的适应性,在合适的参数配置和设置调节下,Xgboost算法可以有效避免过拟合情况发生;2)Xgboost算法有自己的数据预处理结构,在训练开始前,通过数据举证DMatrix进行处理,可以大幅度提高迭代效率;3)Xgboost算法中的正则化项可以防止模型复杂化,同样可以预防过拟合情况发生;4)Xgboost算法可以进行缺失数据的自行处理,同时保证分裂节点的恰当选择;5)Xgboost算法在数据预处理前会进行数据的预排序处理,这一步骤极大地提高了后期数据迭代处理的计算效率。这些优势使得Xgboost算法模型在各个领域得到了应用,并且展现出出色的数据处理效果,在电力设备的故障诊断分析中,三比值法的离散化处理,使得Xgboost算法模型取得了更好的分类效果。
模型的好坏由模型的有效性决定。本文以Iris鸢尾花数据集和DGA数据集为例,采用三比值法对数据进行离散化处理,以此对基于Spark的Xgboost 算法变压器故障诊断模型进行性能验证。验证实验分为两个部分:第一部分通过对Xgboost 算法和随机森林算法的数据集处理准确率对比,验证Xgboost 算法的优越性;第二部分将Xgboost 算法在Spark和Hadoop两种计算框架下的运算速度进行对比,以此验证Spark框架的有效性。
Iris鸢尾花数据集由3个类别的花型构成,每个类型有50个花蕊数据,3种花型共150个花蕊数据。鸢尾花数据集是测试分类模型分类性能的国际通用标准数据集,以花瓣和花萼的长度和宽度为依据,可以将这些花分为4种不同的属性。DGA数据总共分为7种化合物类型,通过三比值法对故障数据的预处理,去除了一氧化碳和二氧化碳这两种气体,剩下的数据中选择500条数据作为此次实验的变压器故障数据,分别包含1种征程类型和5种故障类型。在本文的模型验证实验中,采用4∶6的比例分配测试集和训练集。
图5为Xgboost算法和随机森林算法的数据集处理准确率统计结果,可以发现,模型分类的准确率与决策树的数量呈正相关;随着决策树的增加,模型分类准确率逐渐稳定。在保证决策树数量的情况下,随机森林算法对鸢尾花数据集的分类准确率达到了98%,对DGA数据集的分类准确率达到了87%;Xgboost 算法对鸢尾花数据集的分类准确率达到了99%,对DGA数据集的分类准确率达到了92%。从实验结果可以发现,Xgboost算法的分类效果明显优于随机森林算法的分类效果。
图5 Xgboost算法和随机森林算法的数据集处理准确率
本文以DGA数据作为实验对象,并将数据放大10 000倍。将Xgboost算法在Spark和Hadoop两种计算框架上运行,图6为其在两种框架上的运算速度统计结果。观察图中结果可以发现,一方面,Xgboost算法在并行分布式计算框架下的运行速度随着节点数量的增加而增加,当达到一定节点数量后,运行速度保持稳定;另一方面,相比于Hadoop分布式计算框架,Spark的优势随着集群规模的增加而增加;当运行速度稳定后可以发现,Spark的运算速度是Hadoop的40倍以上。
图6 Xgboost在Spark和Hadoop两种计算框架上的运算速度对比
在面对突发极端天气的情况下,电网系统面临着海量数据的冲击。其中故障数据在电网数据中价值密度低,但它们直接关系着电力系统能否稳定运行。通过性能验证实验发现,本文构建的基于Spark框架的Xgboost设备故障诊断模型具有极高的准确性和运行效率,为电力系统故障诊断的平台开发奠定了理论基础。但本文研究尚存些许不足,例如在对模型进行对比验证时只用到了随机森林和Xgboost算法,后续将从更多的角度,对本文所提算法模型做深入研究。