在写RBF神经网络以前仍是说下训练集和测试集的问题!关于训练集的选取,选取要有表明性,就像选出的班干部,要能代替大家的班级风气,班级风貌(好像比方没打好)。这个数量不必定要多(多没有表明性也是枉然),但样本的表明的特征必定要所有包括在内(数量越多,样本特征全有,这样训练的模型也就更具备表明性)html
数据集主要是分如下几种:算法
训练集:学习样本数据集,经过匹配一些参数来创建一个分类器。创建一种分类的方式,主要是用来训练模型的。
验证集:对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来肯定网络结构或者控制模型复杂程度的参数。
测试集:主要是测试训练好的模型的分辨能力(识别率等)
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||)是径向同性的,所以称为径向基函数。网络
上面是径向基函数的线性组合,和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,我会在这里进行上传!