【发布时间】:2014-09-22 16:26:29
【问题描述】:
有许多曲线拟合和插值工具,例如 polyfit(甚至是我发现的 here 这个不错的 logfit 工具箱),但我似乎找不到任何适合我的 x-y 数据的 sigmoid 函数。
这样的工具是否存在或者我需要自己制作?
【问题讨论】:
标签: matlab curve-fitting
有许多曲线拟合和插值工具,例如 polyfit(甚至是我发现的 here 这个不错的 logfit 工具箱),但我似乎找不到任何适合我的 x-y 数据的 sigmoid 函数。
这样的工具是否存在或者我需要自己制作?
【问题讨论】:
标签: matlab curve-fitting
如果您安装了统计工具箱,您可以使用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是拟合系数的向量。
【讨论】:
sigfunc = @(A, x)(A(1) ./ (1 + exp(-A(2)*x)));
vector of the fitting coefficients 是什么意思?
A 是定义拟合 sigmoid 的系数向量。为了澄清这一点,您可以查看sigfunc 的定义。
nlinfit,尤其是gatool,是解决这个问题的大锤。 sigmoid 不是一个特定的函数。最常见的是它被认为与逻辑函数相同(通常也是最有效的计算):
y = 1./(1+exp(-x));
或广义逻辑。但是各种曲线都可以有sigmoidal shapes。如果您知道您的数据是否特别对应一个,则可以改进拟合并应用更有效的方法。例如,error function (erf) 具有 S 形形状并显示在 normal distribution 的 CDF 中。如果您知道您的数据是高斯过程的结果(即数据是 CDF)并且您拥有 Stats 工具箱,则可以使用 normfit 函数。此功能基于maximum likelihood estimation (MLE)。如果您最终需要编写自定义拟合函数(例如,出于性能原因),我会针对您想要拟合的特定形式的 sigmoid 研究 MLE 技术。
【讨论】:
我建议您使用 MATLAB 的 Global Optimization Toolbox,尤其是 Genetic Algorithm Solver,您可以通过遗传算法优化(= 找到最适合您的数据)sigmoid 函数的参数来解决您的问题。它有一个易于使用的 GUI。
Genetic Algorithm Solver 的 GUI,您可以使用 gatool 调用它:
【讨论】: