GRNN RBF PNN 的matlab实现(学习笔记)
例子源自于https://www.bilibili.com/video/BV1Hx411M7Qw?from=search&seid=2046861666796360058
RBF径向基神经网络
-
清空,导入数据数据
clear all clc
然后
load spectra_data.mat
进行数据的导入
-
生成训练集和测试集
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;
-
生成网络
net = newrbe(P_train,T_train,30); %生成网络net,30是径向基的参数,类似于阈值的概念
-
仿真训练
T_sim = sim(net,P_test); %进行训练网络的仿真
-
仿真结果
这里就是用测试集进行仿真,看看测试集放到训练的结果里面是否好用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表示决定系数,表示拟合的好坏。离一越近越好,越远越差。
-
注意事项
(1). rbf的唯一参数就是那个speed,speed的选值决定整个网络的好坏
(2).如果可以的话可以用程序进行循环,本代码是50比较好一点,可以整个程序套在一个循环,从很小试到很大
(3).用R^2来判断好坏,但是不是越大越好,过拟合也不是很好办。
GRNN与PNN
net_grnn = newgrnn(p_train,T_train);
只有在创建网络是时候于与RBF不一样,所以只需要换一下就行,
注意:
GRNN是没有传入参数,根据传入数据进行概率密度估计。