【问题标题】:Python multiple curve fitting modelsPython多曲线拟合模型
【发布时间】:2014-12-04 07:29:35
【问题描述】:

有没有办法将 x,y 对数据集提供给一个函数,该函数将返回曲线拟合模型和系数的列表。 DataFit 程序使用大约 200 种不同的模型来执行此操作,但我们正在寻找一种 Python 的方式。从指数到逆多项式等。

我看过很多手动使用 scipy 键入每个模型的帖子,但这对于我们要测试的模型数量来说是不可行的。

我找到的最接近的是 pyeq2,但这并没有返回函数列表,而且似乎是一个要编码的兔子洞。

如果 R 有这个可用,我们可以使用它,但 Python 是真正的目标

以下是数据示例,我们想找到描述这条曲线的最佳方式

【问题讨论】:

  • 我知道有些人会这样做,但我认为这是不好的做法。非线性模型应基于理论考虑。非线性函数的数量是无限的,那么您为什么认为(i)您的候选函数之一代表生成数据的过程,以及(ii)R² 将识别“正确”函数?如果您有一些潜在的候选函数(例如,吸附等温线),我可以理解做类似的事情,但我不会使用 R² 作为决策标准,我永远不会使用 200 个任意函数来这样做。
  • @Roland 主要原因是通过测试多个模型,我们可以快速看到与数据在统计上最匹配的结果曲线。然后从最好的几个候选人中提炼或挑选一个。例如,自动测试 1 到 5 阶多项式并查看更高阶是否过冲或拟合得更好。到目前为止,datafit 软件已经满足了我们的需求,但它需要花钱并且在编程方面根本没有灵活性
  • @Roland 我们得到的输出实际上是,StdError, Residual Sum, Residual Avg。 RSS,R^2,Ra^2。它只是为我们找到排名靠前的函数的一种快速方法,因为我们的主要研究背景不在这个领域
  • 好吧,我不同意您寻找“在统计上与数据最匹配的结果曲线”的方法。如果那是您的目标,您可能应该使用 GAM。但我现在闭嘴了。这是你的数据,你必须坚持你的结果。
  • @Roland 的评论是正确的。这几乎是我见过的最糟糕的非线性建模应用。令人震惊的是,人们仍然这样做。此外,R.sq 对于非线性模型毫无意义。对于线性模型,R.sq 是模型解释的可变性分数。对于非线性模型情况并非如此。在一个族(例如多项式)中,具有更多参数的模型总是会产生更大的 R.sq,因此该指标无法评估拟合优度。

标签: python r curve-fitting


【解决方案1】:

您可以在 R 中尝试库样条曲线。我已将其用于对一些单变量数据进行高阶曲线拟合。你可以尝试用相应的 R^2 错误来改变和实现类似的事情。

【讨论】:

    【解决方案2】:

    您可以决定执行以下操作:

    • 选择一个模型来拟合参数。该模型应基于单个自变量。这可以通过 python 的 scipy.optimize curve_fit 函数来完成。你可以选择双曲线之类的东西。
    • 选择一个复杂的模型,它可能代表某种工作的潜在机制。就像疾病 SIR 模型中的 ODE 系统一样。拟合参数绝非易事。这将通过马尔可夫链蒙特卡罗 (MCMC) 方法完成。这非常困难。
    • 意识到您拥有数据并且可以通过 scikit learn 使用机器学习从您的数据中进行预测。这是一种不需要参数的方法。

    机器学习和神经网络不适合某些东西,也无法真正告诉您基本机制,但可以做出预测,就像最佳拟合模型一样......我敢说更好。

    【讨论】:

      【解决方案3】:

      最后,我们发现 Eureqa 软件能够做到这一点。 https://www.nutonian.com/products/eureqa/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-08
        • 2018-07-23
        • 2018-11-11
        • 2019-02-05
        • 2021-07-23
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多