1.简述
学习目标: 概率神经网络分类预测 基于PNN的变压器故障诊断
概率神经网络是由Specht博士在1989年首先提出, 是一种与统计信号处理的许多概念有着紧密联系的并行算法。它实质上是一个分类器,根据概率密度函数的无参估计进行贝叶斯决策而得到分来结果。整个网络属于径向型网络,不需要进行反向误差传递,具备学习速度快、具有很强的容错性、可以完成任意非线性变换的优点,同时由于各层神经元的数目比较固定,因此易于硬件实现。在实际应用中,尤其在解决分类问题中,PNN不仅能用线性学习算法来完成非线性学习算法的工作,用时也能保证非线性算法的高精度等特征,所以被广泛应用于故障检测和目标分类识别领域。 概率神经网络通常由4层组成。
第1层为输入层,这一层负责将特征向量输入到神经网络中去,输入层神经元的个数就是样本特征值的个数,这一层的作用只是将输入信号用分步的方式来表示。
第2层为模式层,它与输入层之间通过连接权值相连接。
第3层为累加求和层,它具有线性求和功能。这一层的神经元数目与欲分的模式数目相同。
第4层为累输出层,具有判决功能,输出为离散值1和0,分别代表着输入模式的类别。
建立基于PNN的故障诊断模型
当变压器在发生故障时,具有多种故障运行形态。因此,能够及早的发现并处置故障,防止造成重大人员伤亡和经济损失显得十分重要。在采集到的状态数据基础上,训练得出合适的故障诊断模型来对其进行分类。
PNN设计流程图
2.代码
%% 清空环境变量
clc;
clear all
close all
nntwarn off;
warning off;
%% 数据载入
load data
%% 选取训练数据和测试数据
Train=data(1:23,:);
Test=data(24:end,:);
p_train=Train(:,1:3)';
t_train=Train(:,4)';
p_test=Test(:,1:3)';
t_test=Test(:,4)';
%% 将期望类别转换为向量
t_train=ind2vec(t_train);
t_train_temp=Train(:,4)';
%% 使用newpnn函数建立PNN SPREAD选取为1.5
Spread=1.5;
net=newpnn(p_train,t_train,Spread)
%% 训练数据回代 查看网络的分类效果
%% Sim函数进行网络预测
Y=sim(net,p_train);
%% 将网络输出向量转换为指针
Yc=vec2ind(Y);
%% 通过作图 观察网络对训练数据分类效果
figure(1)
subplot(1,2,1)
stem(1:length(Yc),Yc,'bo')
hold on
stem(1:length(Yc),t_train_temp,'r*')
title('PNN 网络训练后的效果')
xlabel('样本编号')
ylabel('分类结果')
set(gca,'Ytick',[1:5])
subplot(1,2,2)
H=Yc-t_train_temp;
stem(H)
title('PNN 网络训练后的误差图')
xlabel('样本编号')
%% 网络预测未知数据效果
Y2=sim(net,p_test);
Y2c=vec2ind(Y2)
figure(2)
stem(1:length(Y2c),Y2c,'b^')
hold on
stem(1:length(Y2c),t_test,'r*')
title('PNN 网络的预测效果')
xlabel('预测样本编号')
ylabel('分类结果')
set(gca,'Ytick',[1:5])
3.运行结果