BP神经网络对鸢尾花卉进行分类
摘要
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。
该数据集包含了5个属性:
Sepal.Length(花萼长度),单位是cm;
Sepal.Width(花萼宽度),单位是cm;
Petal.Length(花瓣长度),单位是cm;
Petal.Width(花瓣宽度),单位是cm;
种类:
- Iris Setosa(山鸢尾)(本例中使用数字‘1’表示)
- Iris Versicolour(杂色鸢尾)(本例中使用数字‘2’表示)
- Iris Virginica(维吉尼亚鸢尾)(本例中使用数字‘3’表示)
Matlab_Code
%正向反馈神经网络
%%关于新版归一化用法:
% 1. [Y,PS] = mapminmax(X) %对矩阵进行归一化
% 2. Y = mapminmax('apply',X,PS) %利用这个对应关系PS对其他数值进行归一化,这个数必须要在xmin 和xmax之间
% 3. X = mapminmax('reverse',Y,PS) %反归一化
%-------------------------------------------------------------------------%
%训练集合
clc;
clear all;
a = textread('train1.txt');
b = textread('test1.txt');
x = a;
x(:,5) = [];
x = x' %训练矩阵
[y,PS] = mapminmax(x); %归一化处理
t = a(:,5);
t = t'; %目标矩阵
%-------------------------------------------------------------------------%
%神经网络
net = feedforwardnet(3); %创建一个两层前馈网络。该网络有一个隐含层有10个神经元,目前设置为3。
% net = cascadeforwardnet(8); %级联正向网络,不过好像没有feedforwardnet好用
net = configure(net,y,t); %配置内存
% %对网络进行训练
% net.trainParam.epochs = 1000;%执行步长为1000
net = train(net,y,t);
%-------------------------------------------------------------------------%
%显示相关参数
y2 = net(y) %训练成果展示
disp('网络训练后的第一层权值为:')
iw1=net.iw{1}
disp('网络训练后的第一层阈值:')
b1=net.b{1}
disp('网络训练后的第二层权值为:')
iw2=net.Lw{2}
disp('网络训练后的第二层阈值:')
b2=net.b{2}
%-------------------------------------------------------------------------%
%测试集合
m = b;
m(:,5) = []; %测试矩阵
m = m';
an = b(:,5);
an = an'; %答案集
n = mapminmax('apply',m,PS);%同一归一化,关于这个“同一归一化”随便取的
G = net(n) %测试结果输出
er =(1 - sum(sqrt((an-G).^2)./an)/length(an))*100; %计算匹配度
fprintf('匹配度为:%f%%\n',er);