微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python使用scipy优化失败

如何解决python使用scipy优化失败

我想使用 scipy minimum 来最小化似然函数。我需要对所有这些函数求和以获得 alpha1,alpha2,alpha3,alpha4,beta1,beta 2 的最佳值。我的代码是:

<a href="assets/test.docx" download>Download</a>

我明白了:

def infected_prob_lh(params):
    alpha1,beta2=params[0],params[1],params[2],params[3],params[4],params[5]
    return -np.sum([ Nij_339034*np.log(Pj_339034)+ (N_339034-Nij_339034)*np.log(1-Pj_339034),Nij_436000*np.log(Pj_436000)+ (N_436000-Nij_436000)*np.log(1-Pj_436000),Nij_817037*np.log(Pj_817037)+ (N_817037-Nij_817037)*np.log(1-Pj_817037),Nij_1282000*np.log(Pj_1282000)+ (N_1282000-Nij_1282000)*np.log(1-Pj_1282000),Nij_4014000*np.log(Pj_4014000)+ (N_4014000-Nij_4014000)*np.log(1-Pj_4014000)])


init_params = [1,1,1]
minimize(infected_prob_lh,x0=init_params,method='Nelder-Mead')

我尝试设置另一个初始值,但没有成功。它似乎只适用于 return 语句中的一个函数,但我需要为所有这些函数的总和找到最佳值。 乐于助人。 谢谢

解决方法

您的返回函数与输入参数无关。因此改变参数不会改变输出。达到最大迭代次数后,优化器停止。

将返回函数改为alpha1,alpha2,alpha3,alpha4,beta1,beta2的函数

作为对您评论的回答:

我在 alpha1,...beta2 变量中使用 Pj_i

我们没有如何定义 Pj_i(读取计算)的代码,但可以肯定的是 Pj_i 是一个具有固定值的变量,因此在最小化器的迭代过程中不会更新. 在使用当前 Pi_j = calculatePi_j(alpha1,...beta2) 计算拟合函数的返回值之前,您需要执行某种 alpha1,...beta2 以重新计算这些值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。