MATLAB之机器学习——RBF神经网络

在写RBF神经网络之前还是说下训练集和测试集的问题!关于训练集的选取,选取要有代表性,就像选出的班干部,要能代替你们的班级风气,班级风貌(好像比方没打好)。这个数量不一定要多(多没有代表性也是枉然),但样本的代表的特征一定要全部包括在内(数量越多,样本特征全有,这样训练的模型也就更具有代表性)
数据集主要是分以下几种:

  • 训练集:学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。
  • 验证集:对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数。
  • 测试集:主要是测试训练好的模型的分辨能力(识别率等)
RBF神经网络概述 RBF(径向基)神经网络具体原理网上有很多,我在这里就推荐我学习的一两篇给大家吧,感觉还不错。这一篇(不过不是matlab语言)和这一篇(写得很详细,用的matlab语言)。
? A radial basis function network is an artificial neural network that uses radial basis functions as activation functions.
就是这么简单,径向基神经网络就是用的径向基函数作为激励函数
RBF的方法是要选择P个基函数,每个基函数对应一个训练数据,由于距离(||dist||)是径向同性的,因此称为径向基函数。

【MATLAB之机器学习——RBF神经网络】MATLAB之机器学习——RBF神经网络
文章图片
MATLAB之机器学习——RBF神经网络
文章图片

上面是径向基函数的线性组合,和BP神经网络(信号前向传播,误差反向传播)的区别也是比较明显的! BP是通过不断的调整神经元的权值来逼近最小误差的。其方法一般是梯度下降。RBF是一种前馈型的神经网络,也就是说他不是通过不停的调整权值来逼近最小误差的,的激励函数是一般是高斯函数和BP的S型函数不一样,高斯函数是通过对输入与函数中心点的距离来算权重的。

详细区别和联系请见这里啊哈!

接下来就附上我学习的代码!
%% I. 清空环境变量 clear all clc%% II. 训练集/测试集产生 %% % 1. 导入数据 load spectra_data.mat%% % 2. 随机产生训练集和测试集 temp = randperm(size(NIR,1)); % 训练集——50个样本 P_train = NIR(temp(1:50),:)'; T_train = octane(temp(1:50),:)'; % 测试集——10个样本 P_test = NIR(temp(51:end),:)'; T_test = octane(temp(51:end),:)'; N = size(P_test,2); %% III. RBF神经网络创建及仿真测试 %% % 1. 创建网络 net = newrbe(P_train,T_train,30); %% % 2. 仿真测试 T_sim = sim(net,P_test); %% IV. 性能评价 %% % 1. 相对误差error error = abs(T_sim - T_test)./T_test; %% % 2. 决定系数R^2 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)); %% % 3. 结果对比 result = [T_test' T_sim' error']%% V. 绘图 figure plot(1:N,T_test,'b:*',1:N,T_sim,'r-o') legend('真实值','预测值') xlabel('预测样本') ylabel('辛烷值') string = {'测试集辛烷值含量预测结果对比'; ['R^2=' num2str(R2)]}; title(string)

在这里说一下为什么要先用matlab来入门机器学习,本人比较喜欢matlab的编程风格,调试,算法实现也比较方便,先用matlab来入门机器学习,先打下良好基础,对机器学习的深入了解开启良好的航道。
至于这两个实验数据spectra_data.mat,我会在这里进行上传!

    推荐阅读