當前位置:
首頁 > 最新 > 使用徑向基神經網路做非線性回歸

使用徑向基神經網路做非線性回歸

今天我們使用徑向基神經網路(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:蟹先森愛學習 |