如何在 python 中拟合自定义非线性模型

How to fit a custom non-linear model in python

假设,我想找到那些最小化 MAE 或 MSE 的参数 w 型号 y(x,z):

y = (w_1 * x_1 + ... + w_n * x_n) / (w_1 * z_1 + ... + w_n * z_n)

如何在 python 中完成?

您可以使用 scipy.optimize.curve_fit。如果你有 n 个变量 x 和 n 个变量 z,你可以让自变量 X2n 行,列应该是每个变量的观察值。

这样,X就是一个2n行,M列的二维数组。另外我们要预测的参数在长度为n的数组w中。这样,OP的函数表示为:

y = w@x/w@z = w@X[:n, :]/w@X[n:, :]

其中 @numpy 中的矩阵乘法。这是完整的代码:

def my_model(x, *args):
  N, _ = x.shape
  w = np.array(args)
  # assuming x and z have same number of variables = N/2
  y = w@x[:N//2, :] / (w@x[N//2:, :])
  return y

popts, pcov = curve_fit(my_model, x, y)

其中 popts 包含所有优化的 w 变量。