如何在python中使用自定义非线性模型

时间:2017-10-09 17:35:13

标签: python math nonlinear-optimization nonlinear-functions

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

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

我怎么能在python中做到这一点?

1 个答案:

答案 0 :(得分:1)

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

通过这种方式,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变量。