径向基网络(RBF)实现函数插值(拟合)

本博文借鉴了径向基网络(RBF network)之BP监督训练,并在其基础上加以改进:1、对原始数据进行k-means聚类,而不是随机选取中心。2、为了防止过拟合,在权重更新时增加了正则项。本文也算是自己学习RBF网络的学习笔记。若有任何疑问,欢迎博文下方留言。
径向基网络(RBF)实现函数插值(拟合)_第1张图片
径向基网络(RBF)实现函数插值(拟合)_第2张图片
径向基网络(RBF)实现函数插值(拟合)_第3张图片
径向基网络(RBF)实现函数插值(拟合)_第4张图片
径向基网络(RBF)实现函数插值(拟合)_第5张图片
径向基网络(RBF)实现函数插值(拟合)_第6张图片
径向基网络(RBF)实现函数插值(拟合)_第7张图片

%训练集与测试集:
train_x = 1:0.1:7; 
train_y = sin(2.*train_x);  
test_x = 0:0.01:8;  
test_y = sin(2.*test_x);
%参数初始化:
rbf.inputSize = size(train_x, 1);  %输入神经元的个数
rbf.hiddenSize = 60;    %隐层神经元的个数  
rbf.outputSize = size(train_y, 1);  %输出神经元的个数
rbf.alpha = 0.1;  %学习速率
rbf.weight = rand(rbf.outputSize, rbf.hiddenSize); %隐层与输出层的个数
maxIter = 10000; %最大迭代次数

%K-means聚类:
[Idx,C]=kmeans(train_x',rbf.hiddenSize);
rbf.center = C';
%BP训练:
for i = 1 : numSamples  
        %% Feed forward  
        for j = 1 : rbf.hiddenSize  
            Green(j, 1) = green(train_x(:, i), rbf.center(:, j), rbf.delta(j));  
        end   
        output = rbf.weight * Green;        
        %% Back propagation  
        delta3 = -(train_y(:, i) - output);  %输出层误差项
        rbf.cost = rbf.cost + sum(delta3.^2);  
        delta_weight = delta_weight + delta3 * Green';  
    end  
    %% step 2: update parameters  
    rbf.cost = 0.5 * rbf.cost / numSamples;  %代价总和
rbf.weight = rbf.weight - rbf.alpha .* delta_weight ./ numSamples - 0.001*rbf.weight;%修正权值

此处附上matlab代码

径向基网络(RBF)实现函数插值(拟合)_第8张图片
径向基网络(RBF)实现函数插值(拟合)_第9张图片
径向基网络(RBF)实现函数插值(拟合)_第10张图片

你可能感兴趣的:(神经网络,深度学习)