matlab bp神经网络三分类

笔者做了一个根据人的年龄判断人属于青少年、中年和老年人的一个bp神经网络分类。

%% 清空环境变量
clc
clear

%% 训练数据预测数据
data=xlsread('data.xlsx');

%从1到768间随机排序,产生随机数,防止过拟合
k=rand(1,40);%产生由在(0, 1)之间均匀分布的随机数组成的数组。
[m,n]=sort(k);%m是排序好的向量,n 是 向量m中对k的索引,这样就将随机数的排列顺序变成整数序号了,即随机抽取的样本


input=data(:,1);%输入数据
group=data(:,2);%标签

%随机提取30个样本为训练样本,从训练集和测试集随机选出10个样本为预测样本
input_train=input(n(1:30),:)';%训练样本,要转置
output_train=group(n(1:30),:)';%训练标签,要转置
input_test=input(n(31:40),:)';%测试样本,要转置
output_test=group(n(31:40),:)';%测试标签,要转置

%输入数据归一化
[inputn,inputps]=mapminmax(input_train);

%% BP网络训练
% %初始化网络结构
net=newff(inputn,output_train,10);

net.trainParam.epochs=1000;
net.trainParam.lr=0.1;
net.trainParam.goal=0.0000004;

%% 网络训练
net=train(net,inputn,output_train);

%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
 
%网络预测输出
BPoutput=sim(net,inputn_test);%预测标签

%% 结果分析
%根据网络输出找出数据属于哪类
BPoutput(find(BPoutput<1.5))=1;
BPoutput(find(BPoutput>=1.5&BPoutput<2.5))=2;
BPoutput(find(BPoutput>=2.5))=3;
%% 结果分析
%画出预测种类和实际种类的分类图
figure(1)
plot(BPoutput,'og')
hold on
plot(output_test,'r*');
legend('预测类别','输出类别')
title('BP网络预测分类与实际类别比对','fontsize',12)
ylabel('类别标签','fontsize',12)
xlabel('样本数目','fontsize',12)
ylim([-0.5 3.5])


%预测正确率
rightnumber=0;
for i=1:size(output_test,2)
    if BPoutput(i)==output_test(i)
        rightnumber=rightnumber+1;
    end
end
rightratio=rightnumber/size(output_test,2)*100;

sprintf('测试准确率=%0.2f',rightratio)
数据如下:第一列为人的年龄,第二列为标签。

91 训练集
121  
231  
21  
41  
51  
271  
291  
141  
191 0-30为青少年
342  
372  
392  
422  
462  
472  
552  
582  
652  
432 31-65为中年
933  
663  
703  
693  
723  
773  
793  
893  
943  
1013 66以上为老年
21 测试集
1003  
602  
412  
231  
763  
813  
933  
562  
121  

注意:1  bp神经网络的是以列进行训练的,即列数为样本数,行数为特征数。所以数据在训练之前要进行转置。http://f.dataguru.cn/forum.php?mod=viewthread&action=printable&tid=542637  帖子也对这个问题进行了阐述

2  bp神经网络的训练函数名是train,所以输入的数据变量名不能写成train,以防两者冲突导致计算机无法辨别。可以写成train123.这样。

https://blog.csdn.net/weixin_42296976/article/details/81252809  帖子也对这个问题进行了阐述

3 bp神经网络训练函数newff等,及其参数参数调整,详解见:https://blog.csdn.net/ckzhb/article/details/60879570 

4 想查看bp神经网络性能图、迭代图和预测线性回归图,详见操作:https://blog.csdn.net/Q1302182594/article/details/8790613

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撒哈拉的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值