2.7.2.1 入门: 一维最优化

使用scipy.optimize.brent() 来最小化一维函数。它混合抛物线近似与区间策略。

二元函数的Brent方法: 在3次迭代后收敛, 因为,稍后二元近似精确了。

2.7.2.1 入门: 一维最优化 - 图1

2.7.2.1 入门: 一维最优化 - 图2

非凸函数的Brent方法: 注意最优化方法避免了局部最小值其实是因为运气。

2.7.2.1 入门: 一维最优化 - 图3

2.7.2.1 入门: 一维最优化 - 图4

In [4]:

  1. from scipy import optimize
  2. def f(x):
  3. return -np.exp(-(x - .7)**2)
  4. x_min = optimize.brent(f) # 实际上在9次迭代后收敛!
  5. x_min

Out[4]:

  1. 0.6999999997839409

In [4]:

  1. x_min - .7

Out[4]:

  1. -2.160590595323697e-10

注意: Brent方法也可以用于限制区间最优化使用scipy.optimize.fminbound()

注意: 在scipy 0.11中, scipy.optimize.minimize_scalar() 给出了一个一维标量最优化的通用接口。