关于两个未知函数参数的已知函数优化

计算科学 优化 Python 数字 曲线拟合
2021-11-29 22:58:12

我有一个数据集,由点组成(xi,yi)为了i=1,N. 我也有一个已知的功能F, 映射这些点xiyi因此F(xi,a(xi),b(xi))=yi, 在哪里a(xi)b(xi)是未知的函数xi. 我想做的是运行优化(最好使用 Python 包)以确定函数ab使误差最小化,并且使函数ab光滑。

一种可能是幼稚的做法是将我的数据与xi变量,然后解决优化问题F(xi,a,b)=yi对于单个值a,b对于 bin 内的所有点。然后,使用这个离散的解决方案a,b,执行数值拟合,得到平滑曲线。

但是,我想知道这是否是最好的方法。有没有一种我可以使用的方法来确定a,b同时尝试从它们创建平滑曲线的值?或者即使有,效果是否与我执行上面描述的天真的分箱优化一样?

2个回答

从某种意义上说,如果存在解决方案,那么您的问题就不是唯一的。要看到这一点,让 (ai,bi),表示方程的解F(xi,ai,bi)=yi,i{1,,N}(或者如果无法实现相等,则适当成本函数的最小化)。那么,任意一对函数{a(x),b(x)}这样a(xi)=ai,b(xi)=bi, 对所有人i{1,,N}, 是您问题的解决方案。显然,所有可能解决方案的集合是不可数的,即使附加要求它们是“平滑的”也是如此。

为了避免解决方案中的这种歧义,一种方法是施加附加条件。例如,您可以将解函数限制为属于有限维(和“平滑”)空间(例如,有序多项式空间n)。在这种情况下,(困难的)函数优化问题被转换为(更简单的)确定有限变量集的问题。

您可以离散化未知函数ab,然后将其表述为具有平滑正则化的最小二乘优化问题。具体来说:

mina,b12i=1N(fiF(xi,miTa,miTb))2+α2aTRa+α2bTRb

在哪里

  • a关于某些离散基函数集的系数(例如,“hat " 函数), bab{ϕj}j=1m
    a(x)=j=1majϕj(x)
  • fi您尝试拟合的第i
  • miT:=[ϕ(x1)ϕ(x2)ϕ(xN)]是“在向量处的测量”,使得 xi
    miTa=a(xi)
  • R 是具有 Neumann 边界条件的拉普拉斯算子的离散形式,加上恒等式的一些小的倍数τ
    R:=ΔN+τI.

然后可以使用 Gauss-Newton 方法或 L-BFGS 或类似方法来解决此问题(手动计算目标函数的导数很简单)。在 Python 中,您可以使用 FEniCS 进行离散化,并使用 Scipy 进行优化,尽管它需要了解一些有限元知识和一些优化知识。