使sigmoid适合数据

时间:2013-05-12 16:42:29

标签: matlab curve-fitting

有很多曲线拟合和插值工具,比如polyfit(甚至我发现here这个漂亮的logfit工具箱),但我似乎无法找到任何适合我sigmoid函数的函数xy数据。

是否存在这样的工具或者我需要制作自己的工具吗?

3 个答案:

答案 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 functionerf)具有S形形状,并显示在CDFnormal 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调用: enter image description here