我已经开发了标准Bass模型的扩展,现在我想使用最小化来估计该模型的参数。
模型是:SVe(t)=θ[t-tv] * {p * m +(q-p)*Σ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是一个大的正数。 ΣSVe(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)
这只是我的想法的代码示例,不起作用。你会如何解决这个问题?如何将我的模型与我的目标联系起来,以便它一遍又一遍地重新评估,直到找到一个接近的解决方案?请随时询问更多信息。
这看起来有点像家庭作业...;)
从您的代码示例中可能看起来您可能正在努力思考函数(在编程中的函数意义上,而不是在数学中)以及它们的参数如何工作以及如何将参数传递给函数,即如何调用函数。我建议你查看scipys最小化函数的文档,并试着找出你应该如何设计你的目标函数及其参数。在目标函数内部,您可以调用模型函数并计算目标值。