Если ваша модель линейная, простейшими методами будут метод наименьших квадратов (линейная регрессия). Здесь есть хороший учебник с примерами здесь .
Поскольку ваша модель оказывается нелинейной (и если вы не можете или не хотите найти аналитическое решение), вы Возможно, вы захотите попробовать числовую оптимизацию .
У Сципи есть функция с именем minimize
, которую вы можете использовать, чтобы найти лучшее решение. Но не гарантировано найти глобальный минимум. Поэтому вам, возможно, придется попробовать разные начальные условия.
Ваш код может выглядеть примерно так:
from scipy.optimize import minimize
# Initial guess
x0 = [1.3, 0.7, 0.8]
res = minimize(cost_function, x0, tol=1e-5)
print(res.x)
Хитрость в том, что вам нужно определить функцию cost_function
, которую вы даете решатель, сначала.
Обычно используют квадратичные c ошибки (сумма квадратов ошибок или среднеквадратических ошибок). Примерно так:
def cost_function(x):
a, b, c = x
model_predictions = f(x_data, a, b, c)
return sum((model_predictions - y_data)**2)
Возможно, вам также придется попробовать разные решатели, встроенные в scipy.optimize.minimize
. Обратитесь к документации о плюсах и минусах каждого метода.
Возможно, сначала ознакомьтесь с примерами из документации Scipy, а затем попытайтесь настроить ее на свою реальную проблему.