神经网络(二):matlab实现

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

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

RBF径向基神经网络

  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表示决定系数,表示拟合的好坏。离一越近越好,越远越差。
  6. 注意事项 (1). rbf的唯一参数就是那个speed,speed的选值决定整个网络的好坏 (2).如果可以的话可以用程序进行循环,本代码是50比较好一点,可以整个程序套在一个循环,从很小试到很大 (3).用R^2来判断好坏,但是不是越大越好,过拟合也不是很好办。

GRNN与PNN

net_grnn = newgrnn(p_train,T_train);

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

经验分享 程序员 微信小程序 职场和发展