使用前向神經網路做線性回歸
前饋神經網路(Feedforward Neural Network,FNN),為人工智慧領域中,最早發明的簡單人工神經網路類型。在它內部,參數從輸入層向輸出層單向傳播。有異於遞歸神經網路,它的內部不會構成有向環。
我們這段時間介紹的感知機也可以歸類為前饋神經網路,今天我們介紹使用MATLAB工具箱中自帶的神經網路工具包中的前饋神經網路來進行線性回歸,代碼如下:
close all; clear all; clc;
%% Linear Regression
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% no hidden layers
net = feedforwardnet([]);
% % one hidden layer with linear transfer functions
% net = feedforwardnet([10]);
% 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","Linear regression","location","northwest")
%% Data generator function
function[X,Xtrain,Ytrain,fig] = data_generator()
% data generator
X = 0.01:.01:10;
f = abs(besselj(2,X*7).*asind(X/2) + (X.^1.95)) + 2;
fig = figure;
plot(X,f,"b-")
hold on
grid on
% available data points
Ytrain = f + 5*(rand(1,length(f))-.5);
Xtrain = X([181:450 601:830]);
Ytrain = Ytrain([181:450 601:830]);
plot(Xtrain,Ytrain,"kx")
xlabel("x")
ylabel("y")
ylim([0 100])
legend("original function","available data","location","northwest")
end
訓練樣本如下:
網路訓練結果如下:
最後學習的結果如下:
最後我們來一個投票,大家選一下自己喜歡的推送內容,我後面會酌情考慮。
以上就是今天推送的內容,歡迎討論。
TAG:蟹先森愛學習 |