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)