SciPy 优化器


SciPy 中的优化器

优化器是 SciPy 中定义的一组过程,用于查找函数的最小值或方程的根。


优化功能

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


方程的根

NumPy 能够求多项式和线性方程的根,但无法求线性方程,就像这样:

x + cos(x)

为此,您可以使用 SciPyoptimze.root功能。

该函数需要两个必需的参数:

乐趣- 代表方程的函数。

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()函数采用以下参数:

乐趣- 代表方程的函数。

x0- 对根的初步猜测。

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

打回来- 每次优化迭代后调用的函数。

选项- 定义额外参数的字典:

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

示例

最小化功能x^2 + x + 2BFGS:

from scipy.optimize import minimize

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

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

print(mymin)
亲自试一试 »

通过练习测试一下

练习:

插入缺失的部分以打印方程的平方根:

from scipy.optimize import root
from math import cos

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

myroot = (eqn, 0)

print()

开始练习