Как я могу варьировать переменную, пока не получу результат наименьших квадратов между выводом модели и реальными данными? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь решить проблему, когда хочу привести модель в соответствие с реальными данными. У меня есть сложная модель, скажем, f (a, b, c, d, e), которая представляет собой функцию, которая выдает значения, которые должны быть аналогичны реальным данным. Один из параметров модели, скажем, переменная «е», может варьироваться. «e» параметр, который корректирует модель так, чтобы она приближалась к реальным данным.

Я хочу, чтобы Python выбрал «е», чтобы квадратичная разница между значениями, полученными моей моделью, и реальными данными была минимальной. Другими словами, это установка:

  1. Vector1 = Реальные ценности
  2. Vector2 = f (a, b, c, d, e); где a, b, c, d уже заданы, а e - единственное неизвестное
  3. Найти е, где (Vector2 - Vector1) ^ 2 свернуто

Спасибо!

1 Ответ

0 голосов
/ 03 мая 2019

Вы можете сделать это с помощью scipy.optimize.least_squares . Вам необходимо предоставить ему функцию, которая принимает значение для e и возвращает невязки (ваш Vector2 - Vector1) и начальное предположение x0. Так что-то вроде

from scipy.optimize import least_squares    

def residuals(e):
  return f(a,b,c,d,e) - vec1

res = least_squares(residuals, x0=0)

res.x  # e value

Обратите внимание, что это гарантирует только нахождение локального минимума для (Vector2 - Vector1)^2; изменение первоначального предположения может повлиять на то, к какому минимуму вы сходитесь.

...