Non Linear Regression for a surface
3 次查看(过去 30 天)
显示 更早的评论
I have the following matrices, and their dimensions:
X (1*249 double)
Y (1*20 double)
Z (20*249 double)
I know that the relation between X and Z is a Sigmoid function ( Z = 1/exp(b(1).*X + b(2))).
I would like to find a function Z = function(X,Y), with the variables X, and Y.
采纳的回答
S0852306
2023-7-24
编辑:S0852306
2023-7-24
@Hidd_1 "I found a function that fitt the surface with R2 = 0.92, do you have any tips how can I improve it?"
R-squared: 0.999089
RMSE: 0.1797
MAE: 0.1202
The fitted surface match your data quite well.

The model I used is a neural net, and its mathematical model is just lots of "weighted sigmoid function".
Notation:
is point-wise sigmoid function, and
are weight matrices and bias vectors


The neural net perform the following operation;

Neural nets are universal approximator, so if you want further improvement, use a larger net, but be careful of overfitting.
clear; clc; close all;
load('Z.mat');
Z=Inter_cubic;
% to run this script, download the tool
% at file exchange: https://tinyurl.com/wre9r5uk
%% Reshape the data to required format
X= 1:1:249;
Y = 1:0.2:4.8;
count=0;
for i=1:numel(X)
for j=1:numel(Y)
count=count+1;
input(1,count)=X(i);
input(2,count)=Y(j);
output(count)=Inter_cubic(count);
end
end
%% model set up
NN.InputAutoScaling='on'; NN.LabelAutoScaling='on'; % perform normalization x'=(x-mean(x))/std(x)
NN.ActivationFunction='Sigmoid'; % 'Gaussian' actually performs better
InSize=2; OutSize=1; % input : x,y ,output : z=f(x,y)
LayerStruct=[InSize,5,5,5,OutSize]; % change the size of network here, e.x. [2,10,10,1];
NN=Initialization(LayerStruct,NN);
%% least square solver
option.MaxIteration=500;
NN=OptimizationSolver(input,output,NN,option);
%% stats
R=FittingReport(input,output,NN);
SST=sum((output-mean(output)).^2);
SSE=sum(R.ErrorVector.^2);
Rsquared=1-SSE/SST;
%% visualization
p=NN.Evaluate(input);
[Xmesh,Ymesh]=meshgrid(X,Y);
pMatrix=reshape(p,size(Z,1),size(Z,2));
figure
scatter3(input(1,:),input(2,:),output,'.')
hold on
s=surf(Xmesh,Ymesh,pMatrix);
s.EdgeColor='none';
legend('data point','fitted surface')
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!