数学建模_以fisheriris数据为例使用新版本神经网络工具箱feedforwardnet进行简单实现
Posted sgyzetrov
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学建模_以fisheriris数据为例使用新版本神经网络工具箱feedforwardnet进行简单实现相关的知识,希望对你有一定的参考价值。
新版本神经网络工具箱feedforwardnet及其简单实现
勘误:之前将文章中神经网络工具箱名字feedforwardnet写做fitforwardnet,六个月过去才发现,失误失误,已紧急更正。
问题:
著名的Iris数据集曾被现代生物统计学之父Ronald A. Fisher用做线性判别分析的试验数据而为世人所熟知.
该数据集中有三种不同类型的鸢尾花setosa/versicolor/virginica,每种有50个样本,每个样本有4个特征(分别是花瓣长/花瓣宽/花萼长/花萼宽).
现要求将Iris数据集随机分为2组,每组各75个样本,每组中每种花各有25个样本。其中一组作为以上程序的训练样本,另外一组作为检验样本(每种花选取25个作为测试)。为了方便训练,将3类花分别编号为1,2,3 。使用这些数据训练一个4输入(分别对应4个特征),3输出(分别对应该样本属于某一品种的可能性大小)的前向网络。
给出网络基本参数信息, 将实验重复10次(随机划分训练集和测试集), 将测试数据按最大概率原则归属到相应的类别, 记录平均正确率和标准差.(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
老式的newff工具箱已经濒临淘汰,新版本神经网络工具箱feedforwardnet早已更新。然而现在上网搜索神经网络的简单实现的文章居然到处还都是使用淘汰的newff工具箱的人,归一化方法的工具箱也使用的是老版的premnmx,究竟是不是无脑互相转载显而易见。这里我使用新工具箱feedforwardnet进行编写,归一化工具使用新版mapminmax函数。
clc
clear
close all
load fisheriris
class(1:50,:)=1.0;%1号
class(51:100,:)=2.0;%2号
class(101:150,:)=3.0;%3号(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
data=[meas(:,1) meas(:,2) meas(:,3) meas(:,4) class];
for i=1:10
%随机分为2组,每组各75个样本,每组中每种花各有25个样本
rand_set_setosa=randperm(50);
rand_set_versicolor= randperm(50)+50;
rand_set_virginica=randperm(50)+100;
%随机分为2组,每组各75个样本,每组中每种花各有25个样本
training_setosa=rand_set_setosa(1:25);
predict_setosa=rand_set_setosa(26:50);
training_versicolor=rand_set_versicolor(1:25);
predict_versicolor=rand_set_versicolor(26:50);
training_virginica=rand_set_virginica(1:25);
predict_virginica=rand_set_virginica(26:50);
%训练集(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
X=[data(training_setosa,1:4);data(training_versicolor,1:4);data(training_virginica,1:4)];%75*4
output=[data(training_setosa,5);data(training_versicolor,5);data(training_virginica,5)];%75*1
[XX,PS]=mapminmax(X,-1,1);%归一化/标准化
%net=feedforwardnet([6 5 4],'trainlm');
%(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
net=feedforwardnet;%bp神经网络使用缺省设定
net.trainparam.epochs=500;%最大迭代500
net.trainparam.goal=0.01;%误差0.01
[net,tr,output1,E]=train(net,XX',output');%开始训练,转置
%测试集
Y=[data(predict_setosa,1:4);data(predict_versicolor,1:4);data(predict_virginica,1:4)];
c=[data(predict_setosa,5);data(predict_versicolor,5);data(predict_virginica,5)];
YY = mapminmax('apply',Y,PS);
YY2=sim(net,YY');%转置 (Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
%计算预测正确率
[s1,s2]=size(YY2);
hitNum=0;
for j=1:s2
index=round(YY2(:,j));
if(index==c(j))
hitNum=hitNum+1;
end
end
sprintf('预测正确率为 %3.3f%%',100*hitNum/s2)
end
最高预测正确率为96%,说明网络的学习是有效的。
(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
visitor tracker
以上是关于数学建模_以fisheriris数据为例使用新版本神经网络工具箱feedforwardnet进行简单实现的主要内容,如果未能解决你的问题,请参考以下文章