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

    技术2026-02-11  38

    最近模式识别的课程设计需要我们对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 )
    Processed: 0.031, SQL: 9