BP神经网络的模式识别代码——以鸢尾花数据集为例

最近模式识别的课程设计需要我们对BP神经网络进行仿真,经过一个星期的学习,综合网上各类算法,进行优化后得到现在这个仿真代码。
所用的data数据集就是网上能够搜到的鸢尾花数据集,大家手里有数据集的那是最好的了。我讲没有像有些博主一样吧鸢尾花数据集人为的分为两组,而是通过代码让其随机产生训练集和测试集。
若大家还希望上传分组的代码时,我到时也会发出来。最后仿真结果如下图。
在这里插入图片描述
本仿真代码可以自动将数据集分为训练集和数据集,代码中的注释我也尽可能详尽的标明,希望能够对大家有帮助。

clear all
clc

%读取特征数据
tezheng=xlsread('data');%读取存在Excel文件中的,data为Excel文件,最后一列为类别,其余为特征
[rn,cm]=size(tezheng);%样本数为rn,特征数为cm-1(减1是因为最后一列为类别)
r_k=rand(1,rn);%产生rn个随机数
[m1,n1]=sort(r_k);%m1为按大小排列好的数组,n1为该数原来的索引
test_num=50;%这里可以自己设定需要测试的样本数
train_num=rn-test_num;%训练集样本数
train_rand=tezheng(n1(1:train_num),:);%最终得到的随机训练集
test_rand=tezheng(n1(train_num+1:end),:);%最终得到的随机测试集
 f=train_rand(:,1:(end-1));%将所有特征值存入f,最后一列为类别号,所以用end-1
 class=train_rand(:,end);%取出最后一列的类别号
[input,minI,maxI] = premnmx( f')  ;
%构造输出矩阵
s = length( class ) ;
output = zeros( s , 3 ) ;%这里的3为最后的分类样数
for i = 1 : s 
   output( i , class( i )  ) = 1 ;
end
%创建神经网络
 net = newff( minmax(input) , [3] , { 'logsig' 'purelin' } , 'traingdx' ) ; 
%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 500 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
%开始训练
net = train( net, input , output' ) ;
%读取测试数据
f_test=test_rand(:,1:(end-1));%取出测试集的所有特征值列
c=test_rand(:,end);%取出测试集中的类别数
%测试数据归一化
testInput = tramnmx ( f_test' , minI, maxI ) ;
%仿真
Y = sim( net , testInput ) 
%统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
    [m , Index] = max( Y( : ,  i ) ) ;
    if( Index  == c(i)   ) 
        hitNum = hitNum + 1 ; 
    end
end
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值