精华内容
下载资源
问答
  • RBF神经网络

    2014-06-16 11:15:33
    RBF神经网络
  • rbf神经网络

    2018-03-17 19:08:03
    一份非常好的关于rbf神经网络的讲解,上面讲的特别容易上手
  • RBF神经网络简单介绍与MATLAB实现

    万次阅读 多人点赞 2017-05-30 09:10:02
    MATLAB实现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神经网络例子,有助于学习径向基神经网络。matlab实现学习例程。
  • 2 RBF神经网络,rbf神经网络详解,matlab源码
  • RBF神经网络自适应控制MATLAB仿真全书及代码
  • RBF神经网络谐波检测,rbf神经网络详解,matlab源码
  • RBF神经网络谐波检测,rbf神经网络详解,matlab源码.rar
  • 基于小波熵和RBF神经网络滚动轴承故障诊断的研究,较为基础和详细
  • Matlab的BP神经网络和RBF神经网络的仿真比较-BP神经网络和RBF神经网络的仿真比较.rar BP神经网络和RBF神经网络的仿真比较,很不错的!!!
  • 基于RBF神经网络的故障诊断,rbf神经网络详解,matlab源码
  • Matlab的RBF神经网络用于模式分类-RBF 神经网络用于模式分类.rar RBF 神经网络用于模式分类
  • Matlab用RBF神经网络优化PID控制器-用RBF神经网络优化PID控制器.rar 用RBF神经网络优化PID控制器
  • rbf 神经网络

    2013-07-01 16:36:22
    很好的学习和参考代码 和文档 可以从原理的角度分析 在有代码实现
  • Matlab的RBF神经网络程序 求助,Matlab 的 RBF神经网络程序为什么测试均方误差很大?clcclearclose all%-------------------------------------------------%产生训练样本与测试样本A=0.086207 0.262772 0.1269570....

    41528d3028836879cd698677c3999917.gifMatlab的RBF神经网络程序

    求助,Matlab 的 RBF神经网络程序为什么测试均方误差很大?clcclearclose all%-------------------------------------------------%产生训练样本与测试样本A=0.086207 0.262772 0.1269570.113793 0.261712 0.1464890.113793 0.261176 0.1855530 0.253351 0.1757870.006897 0.239692 0.1269570 0.233549 0.1269570 0.232297 0.1025420 0.231777 0.1123080 0.231585 0.1660210 0.231511 0.0439470 0.231155 0.1562550 0.230674 0.1513720 0.230357 0.0781270 0.229985 0.1855530 0.2295 0.1269570 0.229246 0.1562550 0.229015 0.0585960 0.228854 0.0585960 0.228858 0.1513720 0.228995 0.131840 0.229027 0.1025420 0.229285 0.1562550 0.2297 0.1367230 0.230721 0.1171910.034483 0.230721 0.1709040.006897 0.237376 0.1269570.086207 0.245976 0.1562550.062069 0.289381 0.1562550.086207 0.351242 0.1855530.062069 0.491243 0.1123080.086207 0.605574 0.1123080.034483 0.674478 0.1562550.062069 0.733842 0.1709040.196552 0.768613 0.1123080.086207 0.792452 0.1709040.034483 0.807965 0.1171910.086207 0.826889 0.131840.168966 0.844617 0.1660210.168966 0.859543 0.1367230.196552 0.879376 0.1367230.196552 0.894525 0.2246160.196552 0.911278 0.1464890.141379 0.922284 0.0585960.196552 0.927073 0.1367230.113793 0.930332 0.1464890.168966 0.932973 0.1464890.168966 0.938881 0.0634780.168966 0.94669 0.1025420.196552 0.952802 0.0976590 0.958737 0.1513720.006897 0.960443 0.1025420 0.96324 0.1171910.113793 0.965827 0.0781270.034483 0.966464 0.2392650.113793 0.969583 0.1709040.086207 0.971601 0.1855530.141379 0.973354 0.131840.034483 0.974763 0.1367230.062069 0.975569 0.1171910.034483 0.976746 0.1367230.006897 0.977846 0.131840.062069 0.978429 0.1757870.086207 0.979458 0.1562550.062069 0.9806 0.1171910.006897 0.980925 0.1367230.141379 0.981492 0.1269570.086207 0.982099 0.1269570.113793 0.982412 0.1269570.141379 0.982897 0.1367230.141379 0.983022 0.1660210.141379 0.983042 0.1269570.

    展开全文
  • RBF神经网络滑模控制算法和控制模型 完全可用的,效果很好
  • Matlab的RBF神经网络对非线性系统进行逼近-RBF神经网络对非线性系统进行逼近.rar RBF神经网络对非线性系统进行逼近
  • RBF 神经网络

    2012-04-26 21:01:38
    学习RBF 的有用的资料,挺实用的,有兴趣可以看看啊

空空如也

空空如也

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

rbf神经网络