📄 bpnne.m
字号:
% BP 神经网络集成用于模式分类
% 使用平台 - Matlab7.1
% 作者:刘丙杰
% 电子邮件:liubingjie@tom.com
clc
clear
close all
%---------------------------------------------------
% 产生训练样本与测试样本,每一列为一个样本
load cancer_train;
load cancer_test;
len=length(cancer_train_input);
pp=round(0.9*len);%训练子集中的样本数
P = cancer_test_input'; % 测试输入
T = cancer_test_output'; % 测试输出(真实值)
for j=1:3
for p=1:pp
rand_num=round(rand*(len-1))+1;
train_input(p,:)=cancer_train_input(rand_num,:);
train_output(p,:)=cancer_train_output(rand_num,:);
end
p1 = train_input'; % 训练输入
t1 = train_output'; % 训练输出
% 函数接口赋值
NodeNum = round(rand*20+10); % 隐层节点数
TypeNum = 1; % 输出维数
%---------------------------------------------------
% 设置网络参数
%TF1 = 'tansig';TF2 = 'purelin'; % 缺省值
%TF1 = 'tansig';TF2 = 'logsig';
TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'tansig';TF2 = 'tansig';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin';
net{j} = newff(minmax(p1),[NodeNum TypeNum],{TF1 TF2},'trainlm');
% 指定训练参数
%net.trainFcn = 'trainlm'; % 内存使用最多(快)
%net.trainFcn = 'trainbfg';
%net.trainFcn = 'trainrp'; % 内存使用最少(慢)
%net.trainFcn = 'traingda'; % 变学习率
%net.trainFcn = 'traingdx';
%net.trainParam.epochs = Epochs; % 最大训练次数
net{j}.trainParam.goal = 1e-4; % 最小均方误差
net{j}.trainParam.min_grad = 1e-20; % 最小梯度
net{j}.trainParam.show = 200; % 训练显示间隔
net{j}.trainParam.time = inf; % 最大训练时间
%---------------------------------------------------
% 训练结果测试
net{j} = train(net{j},p1,t1); % 训练
train_result{j} = sim(net{j},p1); % 测试 - 输出为预测值
for i=1:length(train_result{j})
if train_result{j}(i)>3
train_result{j}(i)=4;
elseif train_result{j}(i)<=3 & train_result{j}(i)>=1.5
train_result{j}(i)=2;
end
end
end
%测试
for j=1:3
test_result{j} = sim(net{j},P);
for i=1:length(test_result{j})
if test_result{j}(i)>3
test_result{j}(i)=4;
elseif test_result{j}(i)<=3 & test_result{j}(i)>=1.5
test_result{j}(i)=2;
else test_result{j}(i)=10;
end
end
test_error=test_result{j}-T
aaa=0;
for i=1:length(test_error')
if test_error(i)~=0
aaa=aaa+1;
end
end
ll=length(test_error') ;
Percent(j) =1- aaa/ll % 正确分类率
end
for n=1:3
ans(n)=0;
end
len_test=length(cancer_test_input);
for m=1:len_test
for j=1:3
if test_result{j}(m)==2
ans(1)=ans(1)+1;
elseif test_result{j}(m)==4
ans(2)=ans(2)+1;
elseif test_result{j}(m)==10
ans(3)=ans(3)+1;
end
end
[max_va,pos]=max(ans);
if pos==1
test_result_final(m)=2;
elseif pos==2
test_result_final(m)=4;
elseif pos==3
test_result_final(m)=10;
end
for n=1:3
ans(n)=0;
end
end
test_error=test_result_final-T
aaa=0;
for i=1:length(test_error')
if test_error(i)~=0
aaa=aaa+1;
end
end
ll=length(test_error') ;
Percent_NNE =1- aaa/ll % 正确分类率
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -