如何在 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,你可以让自变量 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 变量。
假设,我想找到那些最小化 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,你可以让自变量 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 变量。