【问题标题】:Fitting sigmoid to data将 sigmoid 拟合到数据
【发布时间】:2014-09-22 16:26:29
【问题描述】:

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

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

【问题讨论】:

    标签: matlab curve-fitting


    【解决方案1】:

    如果您安装了统计工具箱,您可以使用nonlinear regressionnlinfit

    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 更有用sigfunc = @(A, x)(A(1) ./ (1 + exp(-A(2)*x)));
    • @user92519 没问题,我只是举个例子。
    • 你好。 vector of the fitting coefficients 是什么意思?
    • @ShohamDebnath 我的意思是向量 A 是定义拟合 sigmoid 的系数向量。为了澄清这一点,您可以查看sigfunc 的定义。
    【解决方案2】:

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

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

    或广义逻辑。但是各种曲线都可以有sigmoidal shapes。如果您知道您的数据是否特别对应一个,则可以改进拟合并应用更有效的方法。例如,error function (erf) 具有 S 形形状并显示在 normal distributionCDF 中。如果您知道您的数据是高斯过程的结果(即数据是 CDF)并且您拥有 Stats 工具箱,则可以使用 normfit 函数。此功能基于maximum likelihood estimation (MLE)。如果您最终需要编写自定义拟合函数(例如,出于性能原因),我会针对您想要拟合的特定形式的 sigmoid 研究 MLE 技术。

    【讨论】:

      【解决方案3】:

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

      Genetic Algorithm Solver 的 GUI,您可以使用 gatool 调用它:

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 2016-02-02
        • 2019-09-07
        • 2021-03-21
        • 2018-11-20
        • 2019-06-19
        • 1970-01-01
        • 2014-08-30
        • 2019-08-01
        相关资源
        最近更新 更多