我有关于多变量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
我想知道是否有一个可以用来拟合我的3D数据的sigmoid函数。 我发现了这个答案for 2D data,但我无法针对我的问题进行扩展。
我认为在我的猜测中,辅助功能可能如下所示:
f(x,y)=1\(1+e^(-A0 x+A1))*( 1\(1+e^(-A2 y+A3)) with A0=A2 and A1=A3
我不知道如何从这里开始思考。
我会感激任何见解或建议,因为我现在完全无助。
答案 0 :(得分:2)
在您的情况下,输出变量(我将表示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)
这可以看作是三维的S形状:
这可以被认为是广义线性模型,具有二项分布和对数链接函数。
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
变量中读取模型的参数。