有很多曲线拟合和插值工具,比如polyfit(甚至我发现here这个漂亮的logfit工具箱),但我似乎无法找到任何适合我sigmoid
函数的函数xy数据。
是否存在这样的工具或者我需要制作自己的工具吗?
答案 0 :(得分:13)
如果您安装了统计工具箱,则可以nonlinear regression使用nlinfit
:
sigfunc = @(A, x)(A(1) ./ (A(2) + exp(-x)));
A0 = ones(size(A)); %// Initial values fed into the iterative algorithm
A_fit = nlinfit(x, y, sigfunc, A0);
此处sigfunc
只是sigmoid函数的一个示例,A
是拟合系数的向量。
答案 1 :(得分:9)
nlinfit
,尤其是gatool
,是解决这个问题的重要手段。 S形不是特定的功能。最常见的是它与逻辑函数相同(通常也是计算效率最高的):
y = 1./(1+exp(-x));
或广义后勤。但是所有曲线都可以有sigmoidal shapes。如果您知道您的数据是否与特定数据相对应,则可以改进拟合并且可以应用更有效的方法。例如,error function(erf
)具有S形形状,并显示在CDF的normal distribution中。如果您知道您的数据是高斯过程的结果(即数据是CDF)并且您拥有统计工具箱,则可以使用normfit
函数。此功能基于maximum likelihood estimation(MLE)。如果你最终需要编写自定义拟合函数 - 比如说,出于性能原因 - 我会研究你想要适合的特定形式的sigmoid的MLE技术。
答案 2 :(得分:1)
我建议您使用MATLAB的Global Optimization Toolbox,特别是Genetic Algorithm Solver,您可以通过遗传优化(=找到最适合您的数据)sigmoid函数的参数来解决您的问题算法。它有一个易于使用的GUI。
Genetic Algorithm Solver的GUI,您可以使用gatool
调用: