⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpnne.m

📁 MATLAB编写的BP神经网络程序
💻 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 + -