10

有许多曲线拟合和插值工具,例如 polyfit(甚至是我在这里找到的这个不错的 logfit 工具箱),但我似乎找不到任何适合sigmoid我的 xy 数据的函数。

这样的工具是否存在,还是我需要自己制作?

4

3 回答 3

13

如果您安装了统计工具箱,您可以使用非线性回归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是拟合系数的向量。

于 2013-05-12T17:04:17.757 回答
9

nlinfit, 尤其是gatool, 是解决这个问题的大锤。sigmoid 不是一个特定的函数。最常见的是它与逻辑函数相同(通常也是最有效的计算):

y = 1./(1+exp(-x));

或广义的逻辑。但是各种曲线都可以是S 形。如果您知道您的数据是否与一个特定的数据相对应,则可以改进拟合并应用更有效的方法。例如,误差函数( erf) 具有 S 形形状并出现在正态分布的CDF中。如果您知道您的数据是高斯过程的结果(即数据是 CDF)并且您拥有 Stats 工具箱,则可以使用该函数。该函数基于最大似然估计normfit(MLE)。如果您最终需要编写自定义拟合函数 - 例如,出于性能原因 - 我会针对您想要拟合的特定形式的 sigmoid 研究 MLE 技术。

于 2013-05-12T20:31:51.647 回答
1

我建议您使用 MATLAB 的Global Optimization Toolbox,特别是Genetic Algorithm Solver,您可以通过遗传算法优化(=找到最适合您的数据)sigmoid 函数的参数来解决您的问题。它有一个易于使用的 GUI。

遗传算法求解器的GUI,您可以使用以下命令调用它gatool在此处输入图像描述

于 2013-05-12T17:04:25.530 回答