【问题标题】:Fitting 2D Y-data in python在 python 中拟合 2D Y 数据
【发布时间】:2019-06-06 16:35:04
【问题描述】:

我有一类一般的非线性问题,其中我有 2 个或更多 y 数据向量,它们以依赖但已知的方式耦合到 2 个或更多 x 数据向量,我想找到参数。我正在寻找一种方法来调整 python 中的基本非线性拟合模型,以将两组数据都考虑在内。

一般情况下,我可能有一对:

[y1(x1, x2; A, B), y2(x1, x2; A, B)]

作为一个具体的例子,我可能有:

y1 = A sin(B x1) + e^(-A x1)

y2 = A x1^2 + B x2 + log[A x2]

(假设这些在分析上是不可解决的,或者如果解决了可能会导致效率低下)。我知道y1, y2x1, x2 的所有值,并且我想找到AB 的估计值,它考虑了来自ys 的数据。我可以只拟合一个或另一个等式,然后得到 AB 的估计值。

例如,假设y2 不依赖于B(或依赖非常微弱)。它仍然提供了关于 A 价值的重要信息,我希望 y1 考虑到这一点。

作为第二个问题,我将如何使用这种方法对两组 y 数据赋予不同的权重?

编辑:

我能想到的一种可能的方法是将所有 y 数据堆叠到一个列中,然后使用该函数来处理预期的 y1,y2,然后以 return vstack((y1,y2)) 之类的东西结束该函数,所以我可以比较两组吗?那么我可以有一个与这个连接函数的长度相匹配的加权函数吗?

【问题讨论】:

  • 您在问题中使用了很多文字。如果您在样本输入和输出方面包含一个简单的示例来说明您想要的内容,那么理解您会容易得多
  • 您的非线性拟合方法能否像您提出的方法一样处理向量值函数?
  • 根据您需要的泛化水平,您可以使用scipy.optimize.leastsq 并编写自己的残差函数,包括权重。大多数时候这没什么大不了的,但如果你想拥有例如,可能会变得很棘手。可变数量的方程或数据集。你看过lmfit吗?我没有使用它,但它可能能够做你想做的事情。
  • 你可以看看here

标签: python curve-fitting


【解决方案1】:

我认为您可以按照symfit 示例here 进行操作,并根据您的问题进行调整。所以会是这样的:

from symfit import variables, parameters, Fit, sin, exp, log

x_1, x_2, y_1, y_2 = variables('x_1, x_2, y_1, y_2')
A, B = parameters('A, B')

model_dict = {
    y_1: A * sin(B * x_1) + exp(-A * x_1),
    y_2: A * x_1**2 + B * x_2 + log(A * x_2)
}

fit = Fit(model_dict, x_1=x1data, y_1=y1data, x_2=x2data, 
          y_2=y2data, sigma_y_1=y1stdev, sigma_y_2=y2stdev)
fit_result = fit.execute()

此示例通过提供标准差作为额外信息,已经在不同的y_1y_2 上包含了不同的权重。

免责声明:我是 symfit 的作者。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多