1 简介
概率神经网络(Probabilistic Neural Network,简称PNN)是利用贝叶斯定理和基于风险最小的贝叶斯决策规则对新样本进行分类的神经网络,具有训练时间短且不易收敛到局部极值的优点,但是传统PNN采用相同平滑系数容易导致识别率低和误分类的问题,其次平滑系数对分类结果影响巨大并且难以确定,模式层神经元数目由训练样本数目确定,当训练样本集规模巨大时,导致网络结构复杂。本文改进的哈里斯鹰算法选择PNN网络的平滑系数向量并优化PNN的网络结构.
2 部分代码
%% 清空环境变量
clear
close all
clc
warning off
%% 数据载入
data=xlsread('数据.xlsx');
data=data(randperm(size(data,1)),:); %此行代码用于打乱原始样本,使训练集测试集随机被抽取,有助于更新预测结果,选取合适的数据集划分方式。可以删掉这行代码,不影响程序。
%% 选取训练数据和测试数据
input=data(:,1:end-1);
output=data(:,end);
m=100; %训练的样本数目
input_train=input(1:m,:)';
output_train=output(1:m)';
input_test=input(m+1:end,:)';
output_test=output(m+1:end)';
%% 数据归一化
[inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
inputn_test=mapminmax('apply',input_test,inputps);% 对测试样本数据进行归一化
%类别转换为向量
T=ind2vec(output_train);
%% 使用newpnn函数建立PNN
Spread=0.8;
net=newpnn(inputn,T,Spread);
%% 训练数据回代 查看网络的分类效果
Y=sim(net,input_train);
%网络输出向量转换为类别
Yc=vec2ind(Y);
%% 网络测试
Y2=sim(net,inputn_test);
Y2c=vec2ind(Y2);
rightratio=sum(output_test==Y2c)/length(Y2c); %计算预测的确率
%% 作图
%网络对训练数据分类效果
figure
stem(1:length(Yc),Yc,'bo')
hold on
stem(1:length(Yc),output_train,'r*')
title('PNN 网络训练后的效果')
legend('预测类别','真实类别')
xlabel('样本编号')
ylabel('分类结果')
set(gca,'fontsize',12)
figure
H=Yc-output_train;
stem(H)
title('PNN 网络训练后的误差图')
xlabel('样本编号')
ylabel('误差')
set(gca,'fontsize',12)
%网络对测试数据分类效果
figure
stem(1:length(Y2c),Y2c,'b^')
hold on
stem(1:length(Y2c),output_test,'r*')
title({'PNN 网络的预测效果',['测试集正确率 = ',num2str(rightratio*100),' %']})
xlabel('预测样本编号')
ylabel('分类结果')
legend('预测类别','真实类别')
set(gca,'fontsize',12)
%输出准确率
disp('---------------------------测试准确率-------------------------')
disp(rightratio)
3 仿真结果
4 参考文献
[1]闫雄. 模式分类中概率神经网络算法的研究[D]. 吉林大学.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。