基于Python的scipy.optimize.minimize实现自定义似然函数的最优化求解

1. python的scipy.optimize.minimize 介绍

minimize提供的方法能够解决无/有约束的线性或非线性的多个决策变量目标函数的最优化问题,但是由于该模块是依据函数导数与梯度进行求解,不能够求解整数规划、01规划等问题。完整参数如下:

minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

各个参数的含义如下:

参数 含义 使用说明

fun    

待最小化求解的目标函数(用户自定义) 假设用户有一个自定义方程 fun(x, y, params), 但是使用时不直接传入 fun(x, y, params),而是将其先包装一下,使得fun变成一个仅依赖于params的函数,这样才能通过搜寻合适的params来最小化fun。例如,可以传递这样一个匿名函数(lambda表达式)lambda params: fun(x, y, params) 作为可调用对象
x0     初始化(即目标函数中的参数的初始化值) 一个Array,形状是(n,) n是待搜存参数个数
args    
 
目标函数带参数时需要指定

元组,args 参数用于传递额外的参数给目标函数。它包含除了优化变量外的所有其他参数,这些参数会被直接传递给目标函数及其导数(包括fun、jac 和hess函数)的额外参数。

method     优化器类型
  • ‘Nelder-Mead’ – 尼德勒-米德法(单纯形法的一种)

  • ‘Powell’ – 鲍威尔法

  • ‘CG’ – 共轭梯度法

  • ‘BFGS’ – BFGS拟牛顿法

  • ‘Newton-CG’ – 牛顿-共轭梯度法

  • ‘L-BFGS-B’ – 有限内存BFGS算法(带边界约束)

  • ‘TNC’ – 截断牛顿法(Truncated Newton)

  • ‘COBYLA’ – 线性逼近约束优化方法(Constrained Optimization BY Linear Approximations)

  • ‘COBYQA’ – 此处可能存在误解,通常应为‘COBYLA’,而‘COBYQA’不是标准的优化算法名称。如果是指类似的方法,可能是对原始问题进行二次逼近而非线性逼近。

  • ‘SLSQP’ – 序列最小二乘规划(Sequential Least Squares Programming)

  • ‘trust-constr’ – 信赖域约束算法

  • ‘dogleg’ – 狗腿法(信赖域算法的一种)

  • ‘trust-ncg’ – 信赖域牛顿共轭梯度法

  • ‘trust-exact’ – 精确信赖域法

  • ‘trust-krylov’ – 使用Krylov子空间方法的信赖域优化

  • 如果没有指定,则根据问题是否有约束或边界条件,默认选择 BFGS、L-BFGS-B 或 SLSQP 中的一种。

    jac     雅可比矩阵或梯度函数

    jac{callable, ‘2-point’, ‘3-point’, ‘cs’, bool}

    计算梯度向量的方法,仅适用于CG、BFGS、Newton-CG、L-BFGS-B、TNC、SLSQP、dogleg、trust-ncg、trust-krylov、trust-exact和trust-constr。

  • 如果它是一个自定义函数,它应该是一个返回梯度向量的函数jac(x, *args)。

  • 如果选择‘2-point’, ‘3-point’, ‘cs’,,即数值估计梯度的有限差分方法之一。

  • 如果选择None 或 False,则使用带有绝对步长的2-point有限差分估计来计算梯度。

  • 如果选择True, 则假定 fun 返回一个包含目标函数和梯度的元组 (f, g)。

  • 作者:杰瑞哥哥

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于Python的scipy.optimize.minimize实现自定义似然函数的最优化求解

    发表回复