SciPy 优化器

创建于 2024-12-03 / 32
字体: [默认] [大] [更大]

SciPy 中的优化器

优化器是在 SciPy 中定义的一组过程,它们要么找到函数的最小值,要么找到方程的根。


优化函数

本质上,机器学习中的所有算法都不过是一个复杂的方程,需要借助给定的数据来最小化。


方程的根

NumPy 能够为多项式和线性方程求根,但它无法为线性方程求根,例如:

x + cos(x)

为此,您可以使用 SciPy 的 optimze.root 函数。

这个函数有两个必需的参数:

fun - 一个代表方程的函数。

x0 - 对根的初始猜测。

该函数返回一个包含解决方案信息的对象。

实际解决方案在返回对象的x属性下给出:

实例

求方程的根 x + cos(x):

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print(myroot.x) 亲自试一试 »

注释:返回的对象包含有关解决方案的更多信息。

实例

打印有关解决方案的所有信息(不仅仅是 x 这是根)

print(myroot) 亲自试一试 »

最小化函数

一个函数,在这个上下文中,代表一条曲线,曲线有高点低点

高点称为最大值

低点称为最小值

整个曲线的最高点称为全局最大值,其余的称为局部最大值

整个曲线的最低点称为全局最小值,其余的称为局部最小值


寻找最小值

我们可以使用scipy.optimize.minimize()函数来最小化函数。

minimize() 函数采用以下参数:

fun - 一个代表方程的函数。

x0 - 对根的初始猜测。

方法 - 要使用的方法的名称。可能的值:
    'CG'
    'BFGS'
    'Newton-CG'
    'L-BFGS-B'
    'TNC'
    'COBYLA'
    'SLSQP'

callback - 每次优化迭代后调用的函数。

options - 定义额外参数的字典:

{
     "disp": boolean - print detailed description
     "gtol": number - the tolerance of the error
  }

实例

BFGS最小化函数x^2 + x + 2:

from scipy.optimize import minimize

def eqn(x):
  return x**2 + x + 2

mymin = minimize(eqn, 0, method='BFGS')

print(mymin) 亲自试一试 »

0 人点赞过