现学现卖,csdn论坛有许多3分类器的MATLAB代码,4分类器MATLAB代码比较少
BP神经网络多4分类器代码如下,欢迎访问:
4分类器MATLAB代码:
clear
clc
load shuju1.mat;%读取原始数据,此时原始数据的行为样品
load shuju1_labeltr;%读取原始数据对应的标签,因为是4分类问题,所以[1 0 0 0]是第一类,[0 0 0 1]是第四类
%由于神经网络要求输入输出的列为样品,所以需要转置一下
input = shuju1';
output = shuju1_labeltr';
net = newff(minmax(input),[25 4],{'logsig' 'logsig'},'traingdx');%隐含层25是根据样品的属性设置的,4对应4个类别
%理论上讲,隐含层设置越多,就可以达到收敛
%设置参数,不多哔哔
net.trainparam.show = 1;
net.trainParam.min_grad=1e-25;
net.trainparam.epochs=10000;
net.trainparam.goal=0.0000001;
net.trainParam.lr=0.01;
%训练网络
net=train(net,input,output);
%计算识别率
testinput = input;%测试集选的是原始数据
testoutput=sim(net,testinput);
[l1,l2] = size(testoutput') ;
right_number = 0 ;
for i = 1 : l2
[c,Index]= max(testoutput(:,i));%找出仿真结果中最大值所在位置,即所属类别
[c1,Index1]=max(output(:,i));%找出原始数据标签中最大值(1)所在位置
if Index ==Index1
right_number = right_number + 1 ;
end
end
sprintf('识别率是 %3.3f%%',100 * right_number / l2 )
运行结果:
P分类器代码:
clear
clc
load shuju1.mat;%读取原始数据,此时原始数据的行为样品
load shuju1_labeltr;%读取原始数据对应的标签,因为是p分类问题,所以[1 0 0 0 ...]是第一类,[... 0 0 0 1]是第m类
[~,p]=size(shuju1_labeltr);%p分类问题
[m,n]=size(shuju1);%m为样品数,n为每个样品的属性
%由于神经网络要求输入输出的列为样品,所以需要转置一下
input = shuju1';
output = shuju1_labeltr';
net = newff(minmax(input),[2*m+1 p],{'logsig' 'logsig'},'traingdx');%隐含层2*m+1是根据样品的属性设置的,p对应p个类别
%理论上讲,隐含层设置越多,就可以达到收敛
%设置参数,不多哔哔
net.trainparam.show = 1;
net.trainParam.min_grad=1e-25;
net.trainparam.epochs=10000;
net.trainparam.goal=0.0000001;
net.trainParam.lr=0.01;
%训练网络
net=train(net,input,output);
%计算识别率
testinput = input;%测试集选的是原始数据
testoutput=sim(net,testinput);
[l1,l2] = size(testoutput') ;
right_number = 0 ;
for i = 1 : l2
[c,Index]= max(testoutput(:,i));%找出仿真结果中最大值所在位置,即所属类别
[c1,Index1]=max(output(:,i));%找出原始数据标签中最大值(1)所在位置
if Index ==Index1
right_number = right_number + 1 ;
end
end
sprintf('识别率是 %3.3f%%',100 * right_number / l2 )
进行完上述步骤之后(训练网络),就可以用于分类啦:
cinput=[3.92 0.19 0.35 1.74 0.55];%本例中,每个样品有5个属性
s = sim(net,cinput');
输出: