文章目录

  • RBF的直观介绍
    • 1 RBF是一种两层的网络
    • 2 RBF的隐层是一种非线性的映射
    • 3 RBF输出层是线性的
    • 4 RBF的基本思想是:将数据转化到高维空间,使其在高维空间线性可分
  • RBF学习算法
    • Lazy RBF
  • MATLAB实现RBF神经网络

RBF的直观介绍

RBF具体原理,网络上很多文章一定讲得比我好,所以我也不费口舌了,这里只说一说对RBF网络的一些直观的认识

1 RBF是一种两层的网络

是的,RBF结构上并不复杂,只有两层:隐层和输出层。其模型可以数学表示为:
y j = ∑ i = 1 n w i j ϕ ( ∥ x − u i ∥ 2 ) , ( j = 1 , … , p ) y_j = \sum_{i=1}^n w_{ij} \phi(\Vert x - u_i\Vert^2), (j = 1,\dots,p) yj​=i=1∑n​wij​ϕ(∥x−ui​∥2),(j=1,…,p)

2 RBF的隐层是一种非线性的映射

RBF隐层常用激活函数是高斯函数:
ϕ ( ∥ x − u ∥ ) = e − ∥ x − u ∥ 2 σ 2 \phi(\Vert x - u\Vert) = e^{-\frac{\Vert x-u\Vert^2}{\sigma^2}} ϕ(∥x−u∥)=e−σ2∥x−u∥2​

3 RBF输出层是线性的

4 RBF的基本思想是:将数据转化到高维空间,使其在高维空间线性可分

RBF隐层将数据转化到高维空间(一般是高维),认为存在某个高维空间能够使得数据在这个空间是线性可分的。因此啊,输出层是线性的。这和核方法的思想是一样一样的。下面举个老师PPT上的例子:

上面的例子,就将原来的数据,用高斯函数转换到了另一个二维空间中。在这个空间里,XOR问题得到解决。可以看到,转换的空间不一定是比原来高维的。

RBF学习算法

对于上图的RBF网络,其未知量有:中心向量 u i u_i ui​,高斯函数中常数 σ \sigma σ,输出层权值 W W W。
学习算法的整个流程大致如下图:

具体可以描述为:

  1. 利用kmeans算法寻找中心向量 u i u_i ui​
  2. 利用kNN(K nearest neighbor)rule 计算 σ \sigma σ
    σ i = 1 K ∑ k = 1 K ∥ u k − u i ∥ 2 \sigma_i = \sqrt{\frac{1}{K}\sum_{k=1}^K \Vert u_k - u_i\Vert^2} σi​=K1​k=1∑K​∥uk​−ui​∥2 ​
  3. W W W可以利用最小二乘法求得

Lazy RBF

可以看到原来的RBF挺麻烦的,又是kmeans又是knn。后来就有人提出了lazy RBF,就是不用kmeans找中心向量了,将训练集的每一个数据都当成是中心向量。这样的话,核矩阵 Φ \Phi Φ就是一个方阵,并且只要保证训练中的数据是不同的,核矩阵 Φ \Phi Φ就是可逆的。这种方法确实lazy,缺点就是如果训练集很大,会导致核矩阵 Φ \Phi Φ也很大,并且要保证训练集个数要大于每个训练数据的维数。

MATLAB实现RBF神经网络

下面实现的RBF只有一个输出,供大家参考参考。对于多个输出,其实也很简单,就是 W W W变成了多个,这里就不实现了。

demo.m 对XOR数据进行了RBF的训练和预测,展现了整个流程。最后的几行代码是利用封装形式进行训练和预测。

clc;
clear all;
close all;%% ---- Build a training set of a similar version of XOR
c_1 = [0 0];
c_2 = [1 1];
c_3 = [0 1];
c_4 = [1 0];n_L1 = 20; % number of label 1
n_L2 = 20; % number of label 2A = zeros(n_L1*2, 3);
A(:,3) = 1;
B = zeros(n_L2*2, 3);
B(:,3) = 0;% create random points
for i=1:n_L1A(i, 1:2) = c_1 + rand(1,2)/2;A(i+n_L1, 1:2) = c_2 + rand(1,2)/2;
end
for i=1:n_L2B(i, 1:2) = c_3 + rand(1,2)/2;B(i+n_L2, 1:2) = c_4 + rand(1,2)/2;
end% show points
scatter(A(:,1), A(:,2),[],'r');
hold on
scatter(B(:,1), B(:,2),[],'g');
X = [A;B];
data = X(:,1:2);
label = X(:,3);%% Using kmeans to find cinter vector
n_center_vec = 10;
rng(1);
[idx, C] = kmeans(data, n_center_vec);
hold on
scatter(C(:,1), C(:,2), 'b', 'LineWidth', 2);%% Calulate sigma
n_data = size(X,1);% calculate K
K = zeros(n_center_vec, 1);
for i=1:n_center_vecK(i) = numel(find(idx == i));
end% Using knnsearch to find K nearest neighbor points for each center vector
% then calucate sigma
sigma = zeros(n_center_vec, 1);
for i=1:n_center_vec[n, d] = knnsearch(data, C(i,:), 'k', K(i));L2 = (bsxfun(@minus, data(n,:), C(i,:)).^2);L2 = sum(L2(:));sigma(i) = sqrt(1/K(i)*L2);
end%% Calutate weights
% kernel matrix
k_mat = zeros(n_data, n_center_vec);for i=1:n_center_vecr = bsxfun(@minus, data, C(i,:)).^2;r = sum(r,2);k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
endW = pinv(k_mat'*k_mat)*k_mat'*label;
y = k_mat*W;
%y(y>=0.5) = 1;
%y(y<0.5) = 0;%% training function and predict function
[W1, sigma1, C1] = RBF_training(data, label, 10);
y1 = RBF_predict(data, W, sigma, C1);
[W2, sigma2, C2] = lazyRBF_training(data, label, 2);
y2 = RBF_predict(data, W2, sigma2, C2);

上图是XOR训练集。其中蓝色的kmenas选取的中心向量。中心向量要取多少个呢?这也是玄学问题,总之不要太少就行,代码中取了10个,但是从结果 y y y来看,其实对于XOR问题来说,4个就可以了。

RBF_training.m 对demo.m中训练的过程进行封装

function [ W, sigma, C ] = RBF_training( data, label, n_center_vec )
%RBF_TRAINING Summary of this function goes here
%   Detailed explanation goes here% Using kmeans to find cinter vectorrng(1);[idx, C] = kmeans(data, n_center_vec);% Calulate sigma n_data = size(data,1);% calculate KK = zeros(n_center_vec, 1);for i=1:n_center_vecK(i) = numel(find(idx == i));end% Using knnsearch to find K nearest neighbor points for each center vector% then calucate sigmasigma = zeros(n_center_vec, 1);for i=1:n_center_vec[n] = knnsearch(data, C(i,:), 'k', K(i));L2 = (bsxfun(@minus, data(n,:), C(i,:)).^2);L2 = sum(L2(:));sigma(i) = sqrt(1/K(i)*L2);end% Calutate weights% kernel matrixk_mat = zeros(n_data, n_center_vec);for i=1:n_center_vecr = bsxfun(@minus, data, C(i,:)).^2;r = sum(r,2);k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));endW = pinv(k_mat'*k_mat)*k_mat'*label;
end

RBF_lazytraning.m 对lazy RBF的实现,主要就是中心向量为训练集自己,然后再构造核矩阵。由于 Φ \Phi Φ一定可逆,所以在求逆时,可以使用快速的’\‘方法

function [ W, sigma, C ] = lazyRBF_training( data, label, sigma )
%LAZERBF_TRAINING Summary of this function goes here
%   Detailed explanation goes hereif nargin < 3sigma = 1; endn_data = size(data,1);C = data;% make kernel matrixk_mat = zeros(n_data);for i=1:n_dataL2 = sum((data - repmat(data(i,:), n_data, 1)).^2, 2);k_mat(i,:) = exp(L2'/(2*sigma));endW = k_mat\label;
end

RBF_predict.m 预测

function [ y ] = RBF_predict( data, W, sigma, C )
%RBF_PREDICT Summary of this function goes here
%   Detailed explanation goes heren_data = size(data, 1);n_center_vec = size(C, 1);if numel(sigma) == 1sigma = repmat(sigma, n_center_vec, 1);end% kernel matrixk_mat = zeros(n_data, n_center_vec);for i=1:n_center_vecr = bsxfun(@minus, data, C(i,:)).^2;r = sum(r,2);k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));endy = k_mat*W;
end

RBF神经网络简单介绍与MATLAB实现相关推荐

  1. matlab与python实现神经网络_Adaline神经网络简单介绍和MATLAB简单实现

    Adaline神经网络 Adaline利用了最小二乘法的思想,相较于感知机神经网络,对于数据的线性可分的要求更低一些,可以允许一些异常数据. 上面描述了迭代求解的过程,但是在 x0(k+1) 这里没看 ...

  2. Adaline神经网络简单介绍和MATLAB简单实现

    Adaline神经网络 Adaline利用了最小二乘法的思想,相较于感知机神经网络,对于数据的线性可分的要求更低一些,可以允许一些异常数据. 上面描述了迭代求解的过程,但是在x0(k+1)x_0(k+ ...

  3. 神经网络之感知器算法简单介绍和MATLAB简单实现

    Perceptron Learning Algorithm 感知机学习算法,在1943年被生物学家MeCulloch和数学家Pitts提出以后,面临一个问题:参数需要依靠人工经验选定,十分麻烦.因此人 ...

  4. 深度神经网络简单介绍,神经网络设计与实现

    1.神经网络(深度学习)的几个基础概念 从广义上说深度学习的网络结构也是多层神经网络的一种.传统意义上的多层神经网络是只有输入层.隐藏层.输出层.其中隐藏层的层数根据需要而定,没有明确的理论推导来说明 ...

  5. 深度神经网络简单介绍

    神经网络.深度学习.机器学习是什么?有什么区别和联系? 深度学习是由深层神经网络+机器学习造出来的词.深度最早出现在deepbeliefnetwork(深度(层)置信网络).其出现使得沉寂多年的神经网 ...

  6. 深度神经网络简单介绍,深度神经网络的定义

    有哪些深度神经网络模型? 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN).递归神经网络(RNN).深信度网络(DBN).深度自动编码器(AutoEncoder)和生成对抗网络(GAN)等. ...

  7. 神经网络算法的具体流程,深度神经网络简单介绍

    深度神经网络具体的工作流程是什么样的? 第一,深度神经网络不是黑盒,个人电脑开机直到神经网络运行在内存中的每一比特的变化都是可以很细微的观察的.没有任何神秘力量,没有超出科学解释的现象发生. 第二,深 ...

  8. 典型数据分析软件的简单介绍(MATLAB篇)

    软件概况 Matlab是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件.它集数值分析.矩阵运算.信号处理和图形显示于一体,构成了一个方便.界面良好的用户环境.它还包括了Too ...

  9. 牛顿法的简单介绍及Matlab实现

    目录 牛顿法原理简介 使用牛顿法求解一元方程 使用牛顿法求解平面定位问题 参考文献 牛顿法原理简介 牛顿法的原理是利用函数 f ( x ) f(x) f(x) 的泰勒级数的前几项来寻找方程 f ( x ...

最新文章

  1. R可视化ggplot2绘制重叠密度图(Overlay Density Plots)
  2. Introductionto.NETcracking
  3. linux 安装jdk yum安装 源码包安装
  4. UITableView UITableDataSource UITableViewDelegate的基本方法和属性
  5. 82.开始→运行→输入的命令集锦
  6. 【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)
  7. caffe网络结构图绘制
  8. versions-maven-plugin插件批量修改版本号
  9. 9.5noip模拟试题
  10. 数据结构与算法系列——排序(10)_归并排序
  11. 华为浏览器如何进入阅读模式_华为浏览器有阅读模式吗
  12. 听说 Python 生成二维码很简单,说的好像我Java 很复杂一样。
  13. MATLAB神经网络工具箱的使用——Neural Net Fitting app
  14. BLE service, characteristic
  15. 跨交换机VLAN的配置实验
  16. Opencv学习笔记——视频进度条
  17. python三大器之一——装饰器详解
  18. 思科、华为交换机err-disable的相关排查解决
  19. 成功解决Qt中ui_xxx.h: no such file or directory”
  20. ps计算机软件专用报告,PS笔记 计算机软件及应用 IT计算机 专业资料.docx

热门文章

  1. 【win技巧】Windows10支持快捷键右键菜单新建文本文档
  2. P1258 小车问题(二分法)
  3. Java 9~Java 17主要更新了什么?
  4. 塔式服务器系统配置,联想TD350塔式服务器系统安装配置注意事项
  5. 利用傅里叶变换获取低频和高频部分图像
  6. 12306参数重要信息记录
  7. 啊哈C语言 第五章 【代码】【习题答案】
  8. 社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能
  9. AttributeError: module 'tensorflow' has no attribute 'Session'.解决办法
  10. iamp是什么意思计算机网络,IAMP是什么意思