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

时间:2018-09-17 16:16:40

标签: python-3.x numpy optimization estimation minimization

我已经开发了标准低音模型的扩展,现在我想使用最小化来估计该模型的参数。

该模型是: 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)

这只是我的想法的代码示例,不起作用。 您将如何解决这个问题?我如何将模型与目标联系起来,以便一遍又一遍地重新估计,直到找到合适的解决方案?请随时询问更多信息。

1 个答案:

答案 0 :(得分:0)

这看起来有点像家庭作业...;)

从您的代码示例中,您似乎在为函数的概念(从编程中的函数意义上,而不是数学上的意义上)以及它们的参数如何工作以及如何将参数传递给函数而苦苦挣扎,即如何称呼a功能。我建议您查阅scipys最小化函数的文档,并尝试找出应该如何设计目标函数及其参数。然后,您可以在目标函数内部调用模型函数并计算目标值。