Я разработал расширение стандартной модели баса, и теперь я хочу оценить параметры этой модели, используя минимизацию.
Модель: SVe (t) = θ [t-tv] * {p * m + (qp) * ∑SVe (t-1) + (q / m) * ∑SVe (t-1) ^ 2}
Целевая функция: Свернуть ∑ (SVr - SVe) ^2
SVr - массив данных измерений для ежедневных просмотров видео на Youtube.SVe мои предполагаемые взгляды.Моя цель - оценить Sve, а затем использовать минимизацию, чтобы приблизиться к реальным значениям.
θ [t-tv] - тяжелая функция.У меня также есть вход, который будет выглядеть примерно так:
[[0,1,1,1,1,1][0,0,0,1,1,1][0,0,0,0,1,1]]
p, q и m - параметры, которые меня интересуют и которые я хочу оценить.p и q находятся в диапазоне от 0 до 1, m - большое положительное число.VSVe (t-1) - кумулятивные виды предыдущих периодов.
Моя идея заключалась в том, чтобы определить функцию, которая содержит модель и целевую функцию, в которой я использую минимизацию.
import numpy as np
from scipy.optimize import minimize
SV = np.array([100,10000,1000])
heavi = np.array([[0,1,1,1],[0,0,1,1],[0,0,0,1]])
def model(x):
p = x[0]
q = x[1]
m = x[2]
SVe = sum(heavi * (p*m+(q-p)*sum(SVe[:-1])+(q/m)*(sum(SVe[:-1])**2))
return SVe
def objective(SVr):
#Somehow Call model and compare results, then do it again until res is close to 0
return sum(SVr - SVe)**2
x0 = np.array([0.1, 0.1, 10000])
b1 = (0,1)
b2 = (1,1000000000)
bnds = (b1,b1,b2)
res = minimize(objective, x0, method='SLSQP',bounds = bnds)
print(res)
Это просто пример кода моей идеи, который не работает.Как бы вы решили эту проблему?Как я могу связать мою модель с моей целью, чтобы она переоценивалась снова и снова, пока не нашла близкого решения?Пожалуйста, не стесняйтесь спрашивать дополнительную информацию.