SciPy 优化器
SciPy 中的优化器
优化器是 SciPy 中定义的一组过程,用于求函数的最小值或方程的根。
优化函数
本质上,机器学习中的所有算法都不过是一个复杂的方程,需要借助给定的数据进行最小化。
方程的根
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)
最小化函数
在此上下文中,函数代表一条曲线,曲线有高点和低点。
高点称为最大值。
低点称为最小值。
整条曲线中的最高点称为全局最大值,而其余的点称为局部最大值。
整个曲线的最低点称为全局最小值,而其余点称为局部最小值。
查找最小值
我们可以使用 scipy.optimize.minimize()
函数来最小化函数。
minimize()
函数采用以下参数:
fun - 表示方程的函数。
x0 - 对根的初始猜测。
method - 要使用的方法的名称。合法值:
'CG'
'BFGS'
'Newton-CG'
'L-BFGS-B'
'TNC'
'COBYLA'
'SLSQP'
callback - 每次优化迭代后调用的函数。
options - 定义额外参数的字典:
{ "disp": boolean - 打印详细描述 "gtol": number - 误差的容差 }
实例
使用 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)