Python 使用scipy.optimize.minimize()执行同步拟合/最小化

Python 使用scipy.optimize.minimize()执行同步拟合/最小化,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,我目前正在使用scipy.optimize.minimize()方法来最小化a-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] + hi

我目前正在使用scipy.optimize.minimize()方法来最小化a-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的一组总体最佳估计值


我不知道怎么做,但我相信这一定是一个解决了的问题。任何指导都将不胜感激

可以使用“args”参数向要最小化的函数传递附加参数

参考:

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

以下是对代码的(未测试)更改。我在您的参数中添加了前缀“some_”,以表示可以在此处更改这些参数

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)

“同时”指的是多处理吗?或者你只是想使用更多的df?澄清一下会有帮助的。啊,我明白你现在的要求了。回答马上就来。谢谢你,@leo……我现在就要开始实施了。非常感谢!没问题,如果代码解决了你的问题,如果你能接受它作为答案,我将不胜感激。