SciPy依赖于Numpy,SciPy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等,SciPy是高端科学计算工具包,用于数学、科学、工程学等领域。本文主要介绍Python SciPy 优化器(Optimizers)。

1、SciPy优化器

优化器是SciPy中定义的一组过程,它们可以找到函数的最小值或方程式的根。

2、优化函数

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

3、方程的根

NumPy能够找到多项式和线性方程式的根,但无法找到非线性方程式的根,如下所示:

x + cos(x)

为此,可以使用SciPy的optimize.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)

4、函数最小化

在此,函数代表曲线,曲线具有高点和低点。

高点称为最大值。

低点称为极小值。

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

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

5、找到最小值

我们可以使用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)