【树叶识别】PNN神经网络树叶类别【Matlab 741期】
作者:互联网
一、简介
1 概述
1.1 模式分类的贝叶斯决策理论
2 概率神经网路的网络结构(PNN)
总结:
1、输入层接收样本的值,神经元个数与输入向量长度相等。
2、隐藏层为径向基层,每个神经元对应一个中心(对应一个样本数据)。
3、输入数据分为了i类,因为PNN就是用来分类的,就是先用样本训练网络,然后输入数据,用此网络来鉴别,是属于哪一类数据。
4、上式Xij其实与RBF神经网络一致,就是求每个输入与样本的欧式距离,只不过此隐藏层把数据分为了i个类,并且设第i个类有j个数据。
5、然后下图可以看出,求和层的神经元个数与数据分类的个数相等,此求和层求得上式中,每类数据的平均值。
6、然后比较每一类平均值的大小,把此数据分类到值最大的那一类。
7、下文中,提出在实际计算中,用来理解的公式与实际计算中公式不同,
注意:上边的求和层的神经元个数与模式分类的个数相等。也就是说只有对应类别的样本( 隐藏层的神经元)连接, 不与其他无关的样本连接。
3 概率神经网络的优点
二、源代码
%% 清空环境变量
clc;
clear all
close all
nntwarn off;
warning off;
%% 训练数据预测数据提取及归一化
%下载五类叶片特征参数
load shu1 h1 %女贞
load shu2 h2 %银杏
load shu3 h3 %五角枫
load shu4 h4 %杨树
load shu5 h5 %石楠
%五个特征参数矩阵合成一个矩阵
data(1:30,:)=h1(1:30,:);
data(31:60,:)=h2(1:30,:);
data(61:90,:)=h3(1:30,:);
data(91:120,:)=h4(1:30,:);
data(121:150,:)=h5(1:30,:);
%% 测试数据预测数据提取及归一化
load cece1 g1 %女贞
load cece2 g2 %银杏
load cece3 g3 %五角枫
load cece4 g4 %杨树
load cece5 g5 %石楠
%五个特征参数矩阵合成一个矩阵
test(1:12,:)=g1(1:12,:);
test(13:24,:)=g2(1:12,:);
test(25:36,:)=g3(1:12,:);
test(37:48,:)=g4(1:12,:);
test(49:60,:)=g5(1:12,:);
%% 选取训练数据和测试数据
p_train1=data(:,2:16)';
[p_train,inputps]=mapminmax(p_train1);
t_train=data(:,1)';
p_test1=test(:,2:16)';
p_test=mapminmax('apply',p_test1,inputps);
t_test=test(:,1)';
%% 将期望类别转换为向量
t_train=ind2vec(t_train);
t_train_temp=data(:,1)';
%% 使用newpnn函数建立PNN
Spread=0.1;
net=newpnn(p_train,t_train,Spread)
%% 训练数据回代 查看网络的分类效果
% Sim函数进行网络预测
Y=sim(net,p_train);
% 将网络输出向量转换为指针
Yc=vec2ind(Y);
%% 通过作图 观察网络对训练数据分类效果
figure(1)
subplot(1,2,1)
plot(1:length(Yc),Yc,'bo')
hold on
plot(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;
plot(H)
title('PNN网络训练后的误差图')
xlabel('样本编号')
%% 网络预测未知数据效果
Y2=sim(net,p_test);
Y2c=vec2ind(Y2);
figure(2)
plot(1:length(Y2c),Y2c,'b^')
hold on
plot(1:length(Y2c),t_test,'r*')
title('PNN网络的预测效果')
xlabel('预测样本编号')
ylabel('分类结果')
set(gca,'Ytick',[1:5])
x=[0.1:0.1:2];
a=[1 0.9933 0.96 0.9467 0.94 0.90 0.90 0.90 0.8933 0.8933 0.8933 0.8867 0.8867 0.8867 0.8867 0.8867 0.8867 0.8867 0.8867 0.88];
f=[1 1 1 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833 0.9833];
plot(x,a,'b-*')
hold on
plot(x,f,'r-o')
hold off
%% 将期望类别转换为向量
t_train1=ind2vec(t_train);
t_train_temp=output1(n(1:150))';
%% 使用newpnn函数建立PNN
Spread=0.2;
net=newpnn(inputn,t_train1,Spread)
%% 训练数据回代 查看网络的分类效果
% Sim函数进行网络预测
Y=sim(net,inputn);
% 将网络输出向量转换为指针
Yc=vec2ind(Y);
%% 通过作图 观察网络对训练数据分类效果
figure(1)
subplot(1,2,1)
plot(1:length(Yc),Yc,'bo')
hold on
plot(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;
plot(H)
title('PNN网络训练后的误差图')
xlabel('样本编号')
%% 网络预测未知数据效果
Y2=sim(net,inputn1);
Y2c=vec2ind(Y2);
figure(2)
plot(1:length(Y2c),Y2c,'b^')
hold on
plot(1:length(Y2c),t_test,'r*')
title('PNN网络的预测效果')
xlabel('预测样本编号')
ylabel('分类结果')
set(gca,'Ytick',[1:5])
%%识别正确率
percent1=length(find(H==0))/length(H)
B=Y2c-t_test;
percent2=length(find(B==0))/length(B)
三、运行结果
四、备注
完整代码或者代写添加QQ 912100926
标签:741,树叶,%%,plot,length,train,0.9833,test,Matlab 来源: https://blog.csdn.net/m0_54742769/article/details/116198311