精华内容
下载资源
问答
  • RBF神经网络简单介绍与MATLAB实现

    万次阅读 多人点赞 2017-05-30 09:10:02
    RBF的直观介绍 RBF是一种两层的网络 ...RBF的直观介绍RBF具体原理,网络上很多文章一定讲得比我好,所以我也不费口舌了,这里只说一说对RBF网络的一些直观的认识1 RBF是一种两层的网络是的,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=1nwijϕ(xui2),(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}} ϕ(xu)=eσ2xu2

    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=K1k=1Kukui2
    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 2
    
    
    A = zeros(n_L1*2, 3);
    A(:,3) = 1;
    B = zeros(n_L2*2, 3);
    B(:,3) = 0;
    
    % create random points
    for i=1:n_L1
       A(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_L2
       B(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_vec
       K(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_vec
       r = bsxfun(@minus, data, C(i,:)).^2;
       r = sum(r,2);
       k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
    end
    
    W = 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 vector
        rng(1);
        [idx, C] = kmeans(data, n_center_vec);
        
        % Calulate sigma 
        n_data = size(data,1);
        
        % calculate K
        K = zeros(n_center_vec, 1);
        for i=1:n_center_vec
            K(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] = 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_vec
            r = bsxfun(@minus, data, C(i,:)).^2;
            r = sum(r,2);
            k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
        end
        
        W = 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 here
        if nargin < 3
           sigma = 1; 
        end
    
        n_data = size(data,1);
        C = data;
        
        % make kernel matrix
        k_mat = zeros(n_data);
        for i=1:n_data
           L2 = sum((data - repmat(data(i,:), n_data, 1)).^2, 2);
           k_mat(i,:) = exp(L2'/(2*sigma));
        end
        
        W = 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 here
        n_data = size(data, 1);
        n_center_vec = size(C, 1);
        if numel(sigma) == 1
           sigma = repmat(sigma, n_center_vec, 1);
        end
        
        % kernel matrix
        k_mat = zeros(n_data, n_center_vec);
        for i=1:n_center_vec
            r = bsxfun(@minus, data, C(i,:)).^2;
            r = sum(r,2);
            k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
        end
        
        y = k_mat*W;
    end
    
    
    展开全文
  • RBF_RBF_源码

    2021-09-29 16:37:51
    rbf函数
  • RBF _RBF;matlab_神经网络预测_RBF预测_RBF.zip
  • rbf_RBF_源码

    2021-10-01 11:56:49
    径向基函数(RBF)在神经网络领域扮演着重要的角色,如RBF神经网络具有唯一最佳逼近的特性,径向基作为核函数在SVM中能将输入样本映射到高维特征空间,解决一些原本线性不可分的问题。
  • RBF _RBF;matlab_神经网络预测_RBF预测_RBF_源码.zip
  • RBF神经网络,,对水数据进行预测,希望大家相互借鉴学习。
  • 使用遗传算法对RBF神经网络进行优化,并进行测试
  • RBP_RBF拟合_RBF回归预测_rbf神经网络_RBF预测_回归拟合.zip
  • rbf网络matlab代码RBF网络MATLAB代码 Matlab代码 第一次提交下载:修订版1.4
  • RBF神经网络滑模控制算法和控制模型 完全可用的,效果很好
  • GA_RBF 利用遗传算法对RBF(径向基)神经网络的中心值和宽度进行优化。实现效果比较好
  • RBP_RBF拟合_RBF回归预测_rbf神经网络_RBF预测_回归拟合_源码.zip
  • 遗传算法优化RBF神经网络 完整无缺,好好学习
  • 本案例主要以汽油辛烷值预测,利用RBF神经网络进行对数据进行回归拟合。
  • 用ga优化rbf网络权值阈值,从而实现rbf神经网络的优化,避免陷入局部最优解
  • BP神经网络 预测算法 测试 数据 RBF 神经网络算法
  • 基于matlab的简明的基于聚类的RBF(径向基)神经网络设计算法
  • RBF_lqv_RBF_SOM_源码

    2021-09-30 13:25:01
    使用matlab实现的RBF
  • 基于RBF的手写数字图像识别,matlab程序,欢迎下载交流
  • RBF多输入模型 使用matlab系统net工具箱
  • RBF_pendulum_SIMULINK_RBF神经网络_倒立摆控制_倒立摆RBF.zip
  • 粒子群优化RBF网络权值,可以在线训练,好用的程序
  • 径向基函数 (Radial Basis Function 简称 RBF)
  • RBF_pendulum_SIMULINK_RBF神经网络_倒立摆控制_倒立摆RBF_源码.zip
  • rbf神经网络逼近函数仿真实例研究及实现。
  • RBF预测】基于RBF神经网络实现预测matlab源码
  • neural network rbf matlab code.
  • hand-written RBF neural network code

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,767
精华内容 10,306
关键字:

RBF