花萼长度
花萼宽度
花瓣长度
花瓣宽度
类别
1
5
1
2
4
2
2
2
3
3
有一批花可分为三个品种,利用神经网络算法,根据花萼长度,花萼宽度,花瓣长度和花瓣宽度对其进行分类。
样本包含150组数据,选择90组作为训练样本,60组作为测试样本。输入数据为[花萼长度 花萼宽度 花瓣长度 花瓣宽度],输出数据为花的品种的类别。
要做的工作:
BP神经网络
网络层数:2输入层节点数:4
输出层节点数:1
隐层节点数:m=sqrt(n+l)+a
(n为输入层节点数,l为输出层节点数,a为1~10之间的常数)
%导入训练样本的数据
data=load(‘’);
p=data(:,1:4)‘; %输入量
t=data(:,5)‘; %输出量
%数据归一化到[-1 +1]
[pn,ps] = mapminmax(p);
%导入测试样本的数据
testdata=load(‘’);
p_test=testdata(:,1:4)‘; %输入量
t_test=testdata(:,5)‘; %输出量
%数据归一化到[-1 +1]
[pn_test,ps] = mapminmax(p_test);
:
,作为训练样本;,作为测试样本。
:
= 50; %显示训练结果的间隔步数
=1000; %最大训练次数
=; %训练目标误差
= ; %学习系数
net=train(net,pn,t); %开始训练
:
net = newff(minmax(pn),[10 1],{'tansig''purelin'},'traingdx');
%隐含层传递函数为transing;
%输出层传递函数为purelin;
%训练函数为traingdx(有动量和自适应lr的梯度下降法)
:
a = sim(net,pn_test);
a=round(a); %四舍五入取整
figure(1)
plot(a,':or')
hold on
plot(t_test,'-*');
legend(‘预测类别‘,’实际类别’)
title(‘BP网络预测输出')
ylabel(‘类别')
xlabel(‘样本’)
%预测误差
error=a-t_test;
figure(3)
plot(error,'-*')
title(‘BP网络预测误差')
ylabel(‘误差')
xlabel(‘样本')
figure(3)
count=0; %误分类次数
hold on;
for i=1:60
%预测与实际类别都为1
if a(i)<
if t(i)<
plot(p(1,i),p(4,i),‘ro’);
else
plot(p(1,i),p(4,i),'r*');
count=count+1;
End
%预测与实际类别都为3
elseif a(i)>
if t_test(i)>
plot(p(1,i),p(4,i),'go');
else
plot(p(1,i),p(4,i),'g*');
count=count+1;
end
%预测与实际类别都为1
else
if(t_test(i)<=)&&(t_test(i)>=)
plot(p(1,i),p(4,i),'bo');
else
plot(p(1,i),p(4,i),'b*');
count=count+1;
end
end
end
rate=(60-count)/60 %正确率
:
图中红色为第一类,蓝色为第二类,绿色为第三类。结果显示有一个数据分类错误,%
2021年基于神经网络的数据分类 来自淘豆网m.daumloan.com转载请标明出处.