【问题标题】:Python minimize Objective Function to estimate model parametersPython最小化目标函数来估计模型参数
【发布时间】:2018-09-18 00:24:27
【问题描述】:

我已经开发了标准 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)为前几期的累计Views。

我的想法是定义一个包含模型的函数和一个我使用最小化的目标函数。

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)

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这更像是一个评论而不是一个答案。
    • 我已经阅读了文档,但仍然无法弄清楚如何正确执行此操作。我尝试了不同的方法来实现该功能,但没有找到解决方案。我编写的代码更多地被认为是解释问题的一种方式,而不是需要修复的代码。
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2021-11-09
    • 2014-12-04
    • 2022-01-25
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多