笔者做了一个根据人的年龄判断人属于青少年、中年和老年人的一个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)
数据如下:第一列为人的年龄,第二列为标签。
| 9 | 1 | 训练集 | |
| 12 | 1 | ||
| 23 | 1 | ||
| 2 | 1 | ||
| 4 | 1 | ||
| 5 | 1 | ||
| 27 | 1 | ||
| 29 | 1 | ||
| 14 | 1 | ||
| 19 | 1 | 0-30为青少年 | |
| 34 | 2 | ||
| 37 | 2 | ||
| 39 | 2 | ||
| 42 | 2 | ||
| 46 | 2 | ||
| 47 | 2 | ||
| 55 | 2 | ||
| 58 | 2 | ||
| 65 | 2 | ||
| 43 | 2 | 31-65为中年 | |
| 93 | 3 | ||
| 66 | 3 | ||
| 70 | 3 | ||
| 69 | 3 | ||
| 72 | 3 | ||
| 77 | 3 | ||
| 79 | 3 | ||
| 89 | 3 | ||
| 94 | 3 | ||
| 101 | 3 | 66以上为老年 | |
| 2 | 1 | 测试集 | |
| 100 | 3 | ||
| 60 | 2 | ||
| 41 | 2 | ||
| 23 | 1 | ||
| 76 | 3 | ||
| 81 | 3 | ||
| 93 | 3 | ||
| 56 | 2 | ||
| 12 | 1 |
注意: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
最后
以上就是迷路溪流最近收集整理的关于matlab bp神经网络三分类的全部内容,更多相关matlab内容请搜索靠谱客的其他文章。
发表评论 取消回复