将 3d sigmoid 拟合到数据

Fitting 3d sigmoid to data

我有与多元 S 型函数相关的数据:x y r(x,y)

x           y         r(x,y)

0.468848997 0.487599    0
0.468848997 0.512929    0
0.468848997 0.538259    0
0.468848997 0.563589    0
0.468848997 0.588918    0
0.468848997 0.614248    0
0.468848997 0.639578    0
0.468848997 0.664908    0.000216774
0.468848997 0.690238    0.0235043
0.468848997 0.715568    0.319768
0.468848997 0.740897    0.855861
0.468848997 0.766227    0.994637
0.468848997 0.791557    0.999524
0.468848997 0.816887    0.99954
0.468848997 0.842217    0.99958
0.468848997 0.867547    0.999572
0.468848997 0.892876    0.999634
0.468848997 0.918206    0.999566
0.468848997 0.943536    0.999656
0.468848997 0.968866    0.999637
0.468848997 0.994196    0.999685
.           .            .
.           .            .
.           .            .
0.481520591 0.487599    0
0.481520591 0.512929    0
0.481520591 0.538259    0
0.481520591 0.563589    0
0.481520591 0.588918    0
0.481520591 0.614248    0
0.481520591 0.639578    1.09E-06
0.481520591 0.664908    0.000755042
0.481520591 0.690238    0.0498893
0.481520591 0.715568    0.449531
0.481520591 0.740897    0.919786
0.481520591 0.766227    0.998182
0.481520591 0.791557    0.99954

我想知道是否有一个 sigmoid 函数可以用来拟合我的 3D 数据。 我遇到了这个答案 for 2D data 但我无法针对我的问题扩展它。

我认为辅助功能可能如下所示:

f(x,y)=1\(1+e^(-A0 x+A1))*( 1\(1+e^(-A2 y+A3)) with A0=A2 and A1=A3

我不知道如何从这里开始思考。

我将不胜感激任何见解或建议,因为我现在完全无助。

在您的例子中,我将表示为 r_xy 的输出变量似乎在 [0 1] 范围内。在这种情况下,多元sigmoid可以模拟如下:

x = -10:0.5:10;
y = -10:0.5:10;

x_grid = reshape(repmat(x, numel(x), 1), 1, numel(x) ^ 2);
y_grid = repmat(y, 1, numel(y));

% Add some noise
x_noise = x_grid + randn(size(x_grid));
y_noise = y_grid + randn(size(y_grid));

% Randomly define the B parameter of the sigmoid, with the number of
% variables and an offset.
B = randn(1, 3) + 1;

% Calculate the sample data
r_xy = (1 ./ (1+exp(-B * ([ones(size(x_noise)); x_noise; y_noise]))));

% Plot the data
figure
scatter3(x_grid, y_grid, r_xy)

这可以看出在三个维度上看起来像一个 sigmoid:

这可以被认为是广义线性模型,具有二项分布和 logit link 函数。

Matlab 可以使用 fitglm 函数拟合广义线性模型,如下所示:

% Fit the model
model = fitglm([x_grid; y_grid]', r_xy', 'linear', 'Distribution', 'binomial', 'Link', 'logit');

% Plot the model on the scatter plot
hold on;
mesh(x, y, reshape(predict(model, [x_grid; y_grid]'), numel(x), numel(y)), 'LineWidth', 0.5)

结果如下:

模型的参数可以从model变量中读取。