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神经网络_第1张图片   

上面是径向基函数的线性组合,和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,我会在这里进行上传!

你可能感兴趣的:(入门级的机器学习)