神经网络(二):matlab实现

GRNN RBF PNN 的matlab实现(学习笔记)

例子源自于https://www.bilibili.com/video/BV1Hx411M7Qw?from=search&seid=2046861666796360058

RBF径向基神经网络

神经网络(二):matlab实现_第1张图片

  1. 清空,导入数据数据

     clear all
     clc
    

    然后

    load spectra_data.mat
    

    进行数据的导入

  2. 生成训练集和测试集

     temp = randperm(size(NIR,1));
     %这里产生了输入样本个数的随机数
     P_train = NIR(temp(1:50),:)';
     %根据上面生成的随机数进行采样,1:50作为训练集,:表示跟原来样式一样
    
     %这里需'进行转置,把每个样本的属性作为行,每一列分别为一个样本
     T_train = octane(temp(1:50),:)';
     %生成训练的结果集
    
     P_test = NIR(temp(51:end),:)';
     %生成测试集,用于检测训练出来的网络是否合格
     T_test = octane(temp(51:end),:)';
     
     
     N = size(P_test,2);
     %用于取样测试集有多少个,2表示列的个数,1表示行,因为转置了,所以用2;
    
  3. 生成网络

     net = newrbe(P_train,T_train,30);
     %生成网络net,30是径向基的参数,类似于阈值的概念
    
  4. 仿真训练

     T_sim = sim(net,P_test);
     %进行训练网络的仿真
    
  5. 仿真结果
    这里就是用测试集进行仿真,看看测试集放到训练的结果里面是否好用

     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)); 
    

    R^2表示决定系数,表示拟合的好坏。离一越近越好,越远越差。
    神经网络(二):matlab实现_第2张图片

  6. 注意事项

    (1). rbf的唯一参数就是那个speed,speed的选值决定整个网络的好坏
    (2).如果可以的话可以用程序进行循环,本代码是50比较好一点,可以整个程序套在一个循环,从很小试到很大
    (3).用R^2来判断好坏,但是不是越大越好,过拟合也不是很好办。

GRNN与PNN

    net_grnn = newgrnn(p_train,T_train);

只有在创建网络是时候于与RBF不一样,所以只需要换一下就行,
注意:
GRNN是没有传入参数,根据传入数据进行概率密度估计。

你可能感兴趣的:(神经网络(二):matlab实现)