Matlab-bp神经网络

一、工作流程

  1、加载数据,产生训练集与测试集(验证集)

    首先加载样本,其中样本的输入叫做:特征(变量),其输出值叫做:理想值,将样本分为训练样本(学习所用)和测试样本(效果测试仿真所用)

    需要注意的是样本矩阵的列代表的是样本的个数,行代表每个样本的数据

    代码如下:

    load spectra_data.mat    

    %% 随机产生训练集测试集序列
    temp = randperm(size(attributes,2));
    %产生训练集样本
    P_train = attributes(:,temp(1:80));%选取前80个作为训练集样本
    T_train = strength(:,temp(1:80));
    %产生测试集样本
    P_test = attributes(:,temp(81:end));%将80之后的样本作为测试集样本
    T_test = strength(:,temp(81:end));

    %保存测试集的样本个数

    N = size(P_test,2);

 

  2、数据归一化处理

    由于输入数据的单位不一样,所以有些数据的范围可能比较大,导致的结果可能是神经网络收敛慢、训练时间长

    代码如下:

    %% 数据归一化处理

    %训练集归一化

    [p_train,ps_input] = mapminmax(P_train,0,1);
    [t_train,ps_output] = mapminmax(T_train,0,1);
    %测试集输入数据归一化
    p_test = mapminmax('apply',P_test,ps_input);  %将训练集的归一化的“标准”应用在测试集的归一化上

 

  3、神经网络的创建、神经网络的参数调整、神经网络的训练、神经网络的仿真、仿真结果的反归一化

    代码如下:

 

    %% BP神经网络创建、训练及仿真测试
    %创建网络
    net = newff(p_train,t_train,9);%创建一个具有9个神经元的bp神经网络
    %设置训练参数
    net.trainParam.epochs = 1000;%最多循环次数为1000次
    net.trainParam.goal = 1e-3;%目标误差小于。。。
    net.trainParam.lr = 0.01;%学习率设定为0.01
    %训练网络
    net = train(net,p_train,t_train);
    %仿真测试
    t_sim = sim(net,p_test);
    %数据反归一化
    T_sim = mapminmax('reverse',t_sim,ps_output);

 

  4、神经网络的性能评价(相对误差计算、决定系数计算)

    代码如下:    

    %% 性能评价
    %相对误差
    error = abs(T_sim - T_test)./T_test;
    %决定系数
    R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) -     (sum(T_test))^2)); 

  5、结果对比、绘图处理

    代码如下:    

    %% 结果对比
    result = [T_test' T_sim' error']

 

    %% 绘图
    figure
    plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
    legend('标签','标签')
    xlabel('标签')
    ylabel('标签')
    string = {'标题'};
    title(string)

 

posted @ 2018-03-25 13:32  kzkzkzkz  阅读(1312)  评论(0编辑  收藏  举报