使用徑向基神經網路做非線性回歸
今天我們使用徑向基神經網路(Radial Basis Function Neural Network,RBFNN)來進行非線性回歸,我們先看一下RBFNN的結構
其中的神經元,或者激活函數就是徑向基函數RBF,如下
我們看到RBF中,有一個Ci,也就是中心點,這個神經網路最開始的形式相當於一個全樣本的核映射的方法,或者簡單一點理解就是類似於拉格朗日插值公式的形式,有人證明這種方法可以無限逼近任何函數。
但是對於樣本太多的問題這種全樣本的方式就不好用了,後來人們發現使用少數的幾個中心點就可以達到很好的效果。我們看代碼,樣本生成的方式還是昨天那個函數
clear; close all; clc;
%% RBFN trained by Bayesian regularization
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%--------- RBFN ------------------
% choose a spread constant
spread = .2;
% choose max number of neurons
K = 20;
% performance goal (SSE)
goal = 0;
% number of neurons to add between displays
Ki = 20;
% create a neural network
net = newrb(Xtrain,Ytrain,goal,spread,K,Ki);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,"r")
% Show RBFN centers
c = net.iw;
plot(c,zeros(size(c)),"rs")
legend("original function","available data","RBFN","centers","location","northwest")
%--------- trainbr ---------------
% Retrain a RBFN using Bayesian regularization backpropagation
net.trainFcn="trainbr";
net.trainParam.epochs = 100;
% perform Levenberg-Marquardt training with Bayesian regularization
net = train(net,Xtrain,Ytrain);
%---------------------------------
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,"m")
% Show RBFN centers
c = net.iw;
plot(c,ones(size(c)),"ms")
legend("original function","available data","RBFN","centers","RBFN + trainbr",...
"newcenters","location","northwest")
%% MLP
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% create a neural network
net = feedforwardnet([12 6]);
% set early stopping parameters
net.divideParam.trainRatio = 1.0; % training set [%]
net.divideParam.valRatio = 0.0; % validation set [%]
net.divideParam.testRatio = 0.0; % test set [%]
% train a neural network
net.trainParam.epochs = 200;
net = train(net,Xtrain,Ytrain);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,"color",[1 .4 0])
legend("original function","available data","MLP","location","northwest")
文中使用的RBFNN的結構如下
使用RBFNN得到的結果如下:
使用多層感知機MLP得到的結果如下:
繼續之前的投票,看到就投一下吧:
以上就是今天推送的內容,歡迎討論。


TAG:蟹先森愛學習 |