优化器是 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)
亲自试一试 »
笔记:返回的对象包含有关解决方案的更多信息。
在这种情况下,函数代表一条曲线,曲线有高点和低点。
高点称为极大值。
低点称为最小值。
整条曲线的最高点称为全局最大值,而其余的被称为局部最大值。
整条曲线的最低点称为全局最小值,而其余的被称为局部最小值。
我们可以用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 + 2
和BFGS
:
from scipy.optimize import minimize
def eqn(x):
return x**2 + x + 2
mymin = minimize(eqn, 0, method='BFGS')
print(mymin)
亲自试一试 »
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!