Python: поиск констант из математической модели для восстановления измеренных данных - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь вычислить константы известной математической модели для моих измеренных (и уже отфильтрованных) данных.

Немного псевдокода:

#my data is saved in y_data and x_data
#my model is a function of constants (a,b,c) and the x_data
model = f(x_data, a, b, c)

#set model equal to data
y_data != model
calculate(a, b, c)

Есть ли способ найти константы? Я знаю, что точного результата не будет ... но возможно ли отклонение (например, 5%) от y_data?

Альтернативой может быть вычисление констант для каждого индекса. Затем возьмите уравнения len (x_data) и каким-то образом найдите наилучшую подходящую модель и ее константы.

Я попытался упростить свою проблему, более того, это мой первый вопрос, поэтому дайте мне знать, когда я смогу что-нибудь получше.

Заранее спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Если ваша модель линейная, простейшими методами будут метод наименьших квадратов (линейная регрессия). Здесь есть хороший учебник с примерами здесь .

Поскольку ваша модель оказывается нелинейной (и если вы не можете или не хотите найти аналитическое решение), вы Возможно, вы захотите попробовать числовую оптимизацию .

У Сципи есть функция с именем 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, а затем попытайтесь настроить ее на свою реальную проблему.

...