Python 最小化目标函数来估计模型参数



我已经开发了标准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最小化函数的文档,并尝试找出你应该如何设计你的目标函数及其参数。在目标函数中,您可以调用模型函数并计算目标值。

最新更新