使用scipy.optimise.minimise()执行同时拟合/最小化

时间:2016-11-23 16:10:51

标签: python pandas numpy scipy

我目前正在使用scipy.optimise.minimise()方法来最小化-log似然表达式:

param_array = np.array([
            0.5, # beta1 
            0.5  # beta2  
           ])

def f(param_array): 

        great_bayesian = -sum( np.log(binomial.pmf(t_g_c, t_g_t, (param_array[0] + historical_t_g_c)/(param_array[0] + param_array[1] + historical_t_g_t) ) ) )

        return great_bayesian

beta_opt = optimize.minimize(f,param_array,method='SLSQP', constraints=cons)

当我想在单个数据帧中最小化单个可能性并正确确定beta1和beta2的最佳估计值时,该方法很有效。

但是,我想同时适应多个数据帧并获得一组beta1和beta2的总体最佳估计值。

我看不出怎么做,但我确定它必须是一个已解决的问题。任何指导将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以使用" args"将其他参数传递给您想要最小化的函数。参数。

参考:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html

对于您的示例,您必须重新定义f(...)以获取要更改的参数。然后将调用更改为scipy.minimize以提供要作为元组传递给f(...)的其他参数。这里唯一的限制是需要定义f(...),以便最小化的params数组是第一个参数。

以下是对代码的(未经测试的)更改。我添加了前缀"一些_"你的论点表明这些可以在这里改变。

param_array = np.array([
            0.5, # beta1 
            0.5  # beta2  
           ])

def f(param_array, team_great_conv, team_great_tot, historical_team_great_conv, historical_team_great_tot): 

        great_bayesian = -sum( np.log(binomial.pmf(team_great_conv, team_great_tot, (param_array[0] + historical_team_great_conv)/(param_array[0] + param_array[1] + historical_team_great_tot) ) ) )

        return great_bayesian

beta_opt = optimize.minimize(f, param_array,
                             args=(some_team_great_conv,
                                   some_team_great_tot,
                                   some_historical_team_great_conv,
                                   some_historical_team_great_tot,),
                             method='SLSQP', constraints=cons)