《MATLAB 神经网络43个案例分析》:第24章 概率神经网络的分类预测--基于PNN的变压器故障诊断

《MATLAB 神经网络43个案例分析》:第24章 概率神经网络的分类预测--基于PNN的变压器故障诊断

1. 前言

《MATLAB 神经网络43个案例分析》是MATLAB技术论坛(www.matlabsky.com)策划,由王小川老师主导,2013年北京航空航天大学出版社出版的关于MATLAB为工具的一本MATLAB实例教学书籍,是在《MATLAB神经网络30个案例分析》的基础上修改、补充而成的,秉承着“理论讲解—案例分析—应用扩展”这一特色,帮助读者更加直观、生动地学习神经网络。

《MATLAB神经网络43个案例分析》共有43章,内容涵盖常见的神经网络(BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等)以及相关智能算法(SVM、决策树、随机森林、极限学习机等)。同时,部分章节也涉及了常见的优化算法(遗传算法、蚁群算法等)与神经网络的结合问题。此外,《MATLAB神经网络43个案例分析》还介绍了MATLAB R2012b中神经网络工具箱的新增功能与特性,如神经网络并行计算、定制神经网络、神经网络高效编程等。

近年来随着人工智能研究的兴起,神经网络这个相关方向也迎来了又一阵研究热潮,由于其在信号处理领域中的不俗表现,神经网络方法也在不断深入应用到语音和图像方向的各种应用当中,本文结合书中案例,对其进行仿真实现,也算是进行一次重新学习,希望可以温故知新,加强并提升自己对神经网络这一方法在各领域中应用的理解与实践。自己正好在多抓鱼上入手了这本书,下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第二十四章概率神经网络的分类预测实例,话不多说,开始!

2. MATLAB 仿真示例

打开MATLAB,点击“主页”,点击“打开”,找到示例文件
在这里插入图片描述
选中chapter24.m,点击“打开”

chapter24.m源码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:概率神经网络的分类预测--基于PNN的变压器故障诊断
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Matlab神经网络43个案例分析

% 概率神经网络的分类预测--基于PNN的变压器故障诊断
% by 王小川(@王小川_matlab)
% http://www.matlabsky.com
% Email:sina363@163.com
% http://weibo.com/hgsz2003


%% 清空环境变量
clc;
clear all
close all
nntwarn off;
warning off;
%% 数据载入
load data
%% 选取训练数据和测试数据
tic
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])
toc

添加完毕,点击“运行”,开始仿真,输出仿真结果如下:

net =
    Neural Network
              name: 'Probabilistic Neural Network'
          userdata: (your custom info)
    dimensions:
         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 207
        sampleTime: 1
    connections:
       biasConnect: [1; 0]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]
    subobjects:
             input: Equivalent to inputs{
    
    1}
            output: Equivalent to outputs{
    
    2}
            inputs: {
    
    1x1 cell array of 1 input}
            layers: {
    
    2x1 cell array of 2 layers}
           outputs: {
    
    1x2 cell array of 1 output}
            biases: {
    
    2x1 cell array of 1 bias}
      inputWeights: {
    
    2x1 cell array of 1 weight}
      layerWeights: {
    
    2x2 cell array of 1 weight}
    functions:
          adaptFcn: (none)
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: (none)
       divideParam: (none)
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {
    
    }
        plotParams: {
    
    1x0 cell array of 0 params}
          trainFcn: (none)
        trainParam: (none)
    weight and bias values:
                IW: {
    
    2x1 cell} containing 1 input weight matrix
                LW: {
    
    2x2 cell} containing 1 layer weight matrix
                 b: {
    
    2x1 cell} containing 1 bias vector
    methods:
             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs
时间已过 2.093159 秒。

在这里插入图片描述
在这里插入图片描述

3. 小结

概率神经网络(Probabilistic Neural Network)是由D.F.Speeht博士在1989年首先提出,是径向基网络的一个分支,属于前馈网络的一种。它具有如下优点:学习过程简单、训练速度快;分类更准确,容错性好等。从本质上说,它属于一种有监督的网络分类器,基于贝叶斯最小风险准则。概率神经网络一般有以下四层:输入层、模式层、求和层和输出层。有的资料中也把模式层称为隐含层,把求和层叫做竞争层。其中,输入层负责将特征向量传入网络,输入层个数是样本特征的个数。模式层通过连接权值与输入层连接。计算输入特征向量与训练集中各个模式的匹配程度,也就是相似度,将其距离送入高斯函数得到模式层的输出。模式层的神经元的个数是输入样本矢量的个数,也就是有多少个样本,该层就有多少个神经元。求和层,负责将各个类的模式层单元连接起来,这一层的神经元个数是样本的类别数目。输出层,负责输出求和层中得分最高的那一类。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第二十四章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125288041