???[?(xk)]T?(xi)?T?Y?[y1,y2,?,yi]?T??[1,1,?.1]?i??a?[a1,a2,?,ai] (4.6)
上式(4.6)为一线性方程组,可用最小二乘法求解出a和b的值,由此可得到分类决策的判别函数为:
y(x)?sign(?ai(?(x))T?(x)?b) (4.7)
上式(4.7)中SV为支持向量的集合。对每一个二分类的SVM训练后找出其对应的支持向量,建立最优分类面。
2)多类LS-SVM分类器
显然上述LS-SVM方法只能应用到两类模式的分类问题当中,却不能解决多类分类问题。当LS-SVM应用于解决多类分类问题时,假设在I类分类问题中,其训练样本数据Sv:{xi,yi),i?1,2,?,l,其中yi为l维的由-1和+1组成的l维向量,当xi为第j类别时,yi的第j个目标元素为-1,其余目标元素的皆为+1。为了下述方便,将训练样本数据存储到两个数据矩阵X和Y中,他们的第i行分别为xi和yi。根据SRM原则可得到式(4.8)所示的约束优化问题
[48,49]
SV:
1l1nlT2minQ(?i,bi,?k,i)???i?i?c???k,i (4.8)
2i?12k?1i?1而通过与两类SVM分类类似的变换,上式(4.8)的解由下式给出:
?0??y?i?(i)??bi??0????(i)?????C?1?I??a??I?y?Tii?1,2,?,l (4.9)
上式(4.9)中,y?i为Y的第i列,?(i)则由元素?(ji,)k?yi,jyi,kk(xj,xk)组成,a(i)是对应于y?i的Lagrange乘子向量,bi是对应于y?i的常数项。上式(4.9)的求解是求解上式(4.5)的问题。在求解出了a(i)和bi之后,则可以建立下述LS-SVM函数:
yj(x)??aijyijk(x,xi)?bj,i?1ni,j?1,2,?,l (4.10)
而测试向量x的所属类别则由最后所得的判别函数
y(x)?si(gyjn(x)),j?1,2,?,l输出组成的向量y决定。
4.1.2 LS-SVMlab工具箱
34
基于MATLAB的最小二乘支持向量机工具箱,包括回归、分类、时间序列预测和无监督的学习等内容。该工具箱的代码都是采用C语言程序进行编写的。LS-SVM工具箱根据不同的计算机系统可以运用在Windows版本和Linux版本,目前LS-SVM工具箱有3个版本,其中包括有基本的和高级的,另外一个是在C语言环境下运行的版本,每个不同的算法包含不同的函数。在LS-SVM工具箱[50]外有一个C程序的编译器,它会自动把Matlab程序编译成C程序,然后在C程序下进行计算,这样就大大提高了LS-SVM的运算效率。
MATLAB可以根据数据的多少和数据文件的格式不同,而采用对应的方法获取数据。1)用元素列表的方法直接输入数据;2)创建数据文件,通过Matlab提供的装载数据函数,从数据文件中提取数据,函数load适合从MAT文件、ARSICⅡ文件中读取数据,函数xlsread从.xls格式的文件中读取数据;函数csvread从.csv格式中读取数据。
为了加快分类模型的训练速度,对要训练的输入样本数据需要进行一定的预处理。MATLAB提供的数据预处理方式有归一化处理。
MATLAB中的归一化处理有三种方法: 1)premnmx、postmnmx、tramnmx; 2)restd、poststd、trastd; 3)自己编程。
4.2二叉树及改进的二叉树多类分类算法
4.2.1二叉树多分类算法
文献[51]中介绍了一种适合故障诊断的二叉树多类分类算法[51] (2PTMC),该方法是构造多个两类分类器并组合起来完成多类分类,且采用了一种“one against others” 的分类器构造策略,具有算法简单直观、重复训练样本少的优点。
S1 SVM1 S2 f 1(AG) SVM2 S3 SVM3 Sn SVM n f 2(BG) f3(CG) f k-1(CAG) fk(ABC)
图4.2 基于SVM的2PTMC多分类算法
35
图4.2 给出了2PTMC 的多分类算法。任意给定一个k类分类问题,学习样本为:(x1 ,y1),?,(xi ,yi), x j∈ j=1,2,?,l,y j∈{1,2,?,k},一个2PTM C结构是一个3元组〈F, SVM,SC〉。F={f1,?,fI,?,fk},是二叉树的终止节点集合,由待识别系统的k个可能故障模式集(包括正常状态)构成,在输电线路各种分类中,fi就是从A相接地短路到ABC三相短路的10种故障类型。SVM={SVM1,?,SVMi,?,SVMk-1},是由所设计的k-1个支持向量机组成的二叉树的全部非终止节点集合。对一个k类分类问题,需要构造k-1个SVM机。SC={SC1,?,SCi?,SCk},为属于k个故障状态类别的全部学习样本集合,其中SCi={(x1,yi),?,(xj,yi),?,(xl,yi)}表示第i类的样本组成,xj∈,yi∈{1,2,?,k}。?li?l构成全部学习样本。第i级支持向量SVM的训练样本S i按下述原则确定。
SCS1?全部样本??i?1?S?SC,i?1,2,?,k?1 (4.11)
??ij?1?i?1上式(4.11)中SC?表示不属于第1,2,?,i-1类的全体样本。可见随训练
j?1过程的进行,训练样本数逐渐减少。
4.2.2改进的二叉树算法及其分类模型
在上节中所叙述的基于SVM的2PTMC多类分类算法能够解决简单的多类分类问题,且只能按照“一对多”的方法解决多类分类问题[52,53],却不能解决大类里又有多个小类的问题。为解决上述多层多分类问题,这里采用“one against leavings”对二叉树算法进行改进,它的基本思想是在原二叉树法分出的n类的基础上,对已经分出的第1,2,?,n-1类,再用“one against leavings”规则,利用SVM进行二分类,重复上述过程直至最后到“one against another”,即每一个终止节点为不可再分的一小类为止,参见图4.3。
在分类的优先级方面,根据输电线路故障发生的优先级,可以将最常见的故障或者危害最严重的故障设置为较高的优先级,最先识别出它们。同样的原理,将剩余故障类型再按照出现的概率和危害性设置相应的分类优先级,这样的处理可以有效地加快常见故障和严重故障的分类速度。
36
SVM1
BG
BC BCG CA CAG CG SVM6 bc 单相接地 leavings SVM2 leavings SVM4 leavings AG SVM3 ABC SVM5 ab leavings SVM7 leavings AB ABG SVM8 SVM9 图4.3 基于SVM的改进二叉树输电线路故障分类器
从图4.3可以看出:依据高压输电线路的故障发生优先级,首先利用一个SVM将所有的单相接地故障作为一类先识别出来,在这一类中再利用两个SVM区分出三种单相接地故障,并且在编写程序时将此分类程序放在区分其他故障类别程序的前面,这样做就可以使常发生故障被优先识别,并且在程序中故障数据样本数的重复次数也会相应的减少,从而大大提高了运算速度。然后再用一个SVM将剩余的故障类型中的三相短路故障识别出来。最后所剩余的所有两相短路和两相短路接地故障放在最后识别,因为此类故障发生的较少,故可以最后识别。但在每种两相短路和两相短路接地中需要用一个SVM来识别,如图4.3中的用SVM6来识别AB短路和AB短路接地故障,用SVM8识别BC短路和BC短路接地故障,用SVM9识别CA短路和CA短路接地故障。
基于SVM的改进二叉树输电线路故障分类器模型结合输电线路的故障发生优先级后具有运算速度快、故障识别迅速 、样本重复数少等优点。
4.3 数据归一化算法选择及归一化程序
归一化就是要把需要处理的样本数据经过一定的处理后(通过某种算法)限制在所需要的一定范围内,一般为[0,1]或[-1,1]之间。归一化[54]的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。
37
首先归一化是为了以后所需样本数据处理的方便性,其次是为了保正加快程序运行时收敛性。
由于样本数据中存在着大量的“奇异样本数据”(所谓“奇异样本数据”是指相对于其他输入样本数据特别大或特别小的样本数据)。“奇异样本数据”的存在能引起网络训练时间的增加,并有可能引起网络的无法收敛问题,所以如果存在“奇异样本数据”的训练样本数据,在训练样本数据之前,先进行归一化处理,若不存在“奇异样本数据”,则不需要事先进行归一化处理。
归一化方法主要有如下几种 1)线性函数转换,表达式如下:
y=(x-Min(Value))/(Max(Value)-Min(Value)) (4.12)
说明:x、y分别为转换前、后的值,Max(Value)、Min(Value)分别为所有样本数据中的最大值和最小值。
2)对数函数转换,表达式如下:
x (4.13) y?log10说明:以10为底的对数函数转换。 3)反余切函数转换,表达式如下:
y=atan(x)*2/PI (4.14)
由于现场电力系统的网络结构不同,初始状态不同,运行参数不同,发生故障后所产生的故障短路电流和故障短路电压样本数据的数据大小也是大相径庭,因此,在正式的故障分类之前,要对故障短路电流和故障短路电压样本数据进行归一化处理,甚至是数据处理前所必须的。本论文在研究了多种归一化处理方法的分类效果后,最后选择了“线性函数转换表达式”的归一化处理方法,它的算法原理如公式(4.15)所示。
xi?xi?min(xi),i?1,2,?,n (4.15)
max(xi)?min(xi)公式(4.15)中xi即为实测的短路电流数值,归一化后的属性值xi?[0,1],对数据进行归一化处理后,故障样本数据间的特征差异亦有所改善,其权重值减小,从而减少了错分和误分,提高了故障分类器的正确率。
下面是在MATLAB7.0程序语言中编写的数据归一化的程序: X = input('Input X=') Xt = X
a = max(Xt) b = min(Xt)
[m,n] = size(Xt)
38