欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于scipy.optimize函數(shù)使用及說明

 更新時間:2022年12月14日 08:41:33   作者:大蝦飛哥哥  
這篇文章主要介紹了關(guān)于scipy.optimize函數(shù)使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

scipy.optimize函數(shù)使用

簡單使用scipy.optimize,訓(xùn)練邏輯回歸損失函數(shù),得到權(quán)值。

scipy.optimize模塊包含什么?

該scipy.optimize包提供幾種常用的優(yōu)化算法??梢允褂迷敿?xì)列表: scipy.optimize(也可以通過help(scipy.optimize)找到)。

該模塊包含:

1、使用多種算法(例如BFGS,Nelder-Mead單形,牛頓共軛梯度,COBYLA或SLSQP)對多元標(biāo)量函數(shù)進(jìn)行無約束和無約束的最小化(最小化)

2、全局(強(qiáng)力)優(yōu)化例程(例如,盆地跳動,differential_evolution)

3、最小二乘最小化(least_squares)和曲線擬合(curve_fit)算法

4、標(biāo)量單變量函數(shù)最小化器(minimum_scalar)和根查找器(牛頓)

5、使用多種算法(例如,混合鮑威爾,萊文貝格-馬夸特或大型方法,例如牛頓-克里洛夫)的多元方程組求解器(root)。

使用步驟

1、函數(shù)介紹

import numpy as np
from scipy.optimize import minimize

函數(shù)入?yún)ⅲ?/p>

scipy.optimize.minimize(
?? ??? ??? ??? ??? ? ? fun, ?#可調(diào)用的目標(biāo)函數(shù)。
? ? ? ? ? ? ? ? ? ? ? ?x0, ?#ndarray,初值。(n,)
? ? ? ? ? ? ? ? ? ? ? ?args=(), #額外的參數(shù)傳遞給目標(biāo)函數(shù)及其導(dǎo)數(shù)
? ? ? ? ? ? ? ? ? ? ? ?method=None, #類型的解算器。應(yīng)該是其中之一:
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘Nelder-Mead'、‘Powell'
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘CG'、‘BFGS'
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘Newton-CG'、‘L-BFGS-B'?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘TNC'、‘COBYLA'
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘SLSQP'、‘dogleg'?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?#‘trust-ncg'?

? ? ? ? ? ? ? ? ? ? ? ?jac=None, #目標(biāo)函數(shù)的雅可比矩陣(梯度向量)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#僅適用于CG, BFGS, Newton-CG,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#L-BFGS-B, TNC, SLSQP, dogleg,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#trust-ncg。如果jac是一個布爾值,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#且為True,則假定fun將隨目標(biāo)函數(shù)返回
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#梯度。如果為False,則用數(shù)值方法估計梯
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#度。Jac也可以是返回目標(biāo)梯度的可調(diào)用對
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#象。在這種情況下,它必須接受與樂趣相同
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#的論點(diǎn)。
? ? ? ? ? ? ? ? ? ? ? ?hess=None,?
? ? ? ? ? ? ? ? ? ? ? ?hessp=None,#目標(biāo)函數(shù)的Hessian(二階導(dǎo)數(shù)矩陣)或
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #目標(biāo)函數(shù)的Hessian乘以任意向量p。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #僅適用于Newton-CG, dogleg,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #trust-ncg。只需要給出一個hessp或
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #hess。如果提供了hess,則將忽略
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #hessp。如果不提供hess和hessp,則用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #jac上的有限差分來近似Hessian積。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #hessp必須計算Hessian乘以任意向量。
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?bounds=None, #變量的邊界(僅適用于L-BFGS-B,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #TNC和SLSQP)。(min, max)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #對x中的每個元素,定義該參數(shù)的
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #邊界。當(dāng)在min或max方向上沒有邊界
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #時,使用None表示其中之一。
? ? ? ? ? ? ? ? ? ? ? ?constraints=(), #約束定義
? ? ? ? ? ? ? ? ? ? ? ??? ??? ??? ??? ? ? #(僅適用于COBYLA和SLSQP)
? ? ? ? ? ? ? ? ? ? ? ?tol=None, #終止的邊界。
? ? ? ? ? ? ? ? ? ? ? ?callback=None,?
? ? ? ? ? ? ? ? ? ? ? ?options=None)

返回值: res : OptimizeResult

#以O(shè)ptimizeResult對象表示的優(yōu)化結(jié)果。重要的屬性有:x是解決方案數(shù)組,
#success是一個布爾標(biāo)志,指示優(yōu)化器是否成功退出,以及描述終止原因的消息。

使用scipy.optimize進(jìn)行優(yōu)化

首先看一看這個函數(shù)的形式

scipy.optimize.fmin_cg(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, epsilon=1.4901161193847656e-08, maxiter=None, full_output=0, disp=1, retall=0, callback=None)
  • f: 可調(diào)用,f(x, *args)

要最小化的目標(biāo)函數(shù)。這里 x 必須是在搜索最小值時要更改的變量的一維數(shù)組,而 args 是 f 的其他(固定)參數(shù)。

  • x0: ndarray

用戶提供的 xopt 初始估計值,即 x 的最優(yōu)值。它必須是一維值數(shù)組。

  • fprime: 可調(diào)用,fprime(x, *args),可選

返回 f 在 x 處的梯度的函數(shù)。這里 x 和 args 與上面對 f 的說明相同。返回的值必須是一維數(shù)組。默認(rèn)為 None,在這種情況下,梯度是數(shù)值近似的(參見下面的 epsilon)。

  • args: 元組,可選

傳遞給的參數(shù)值f和fprime.當(dāng)需要額外的固定參數(shù)來完全指定函數(shù)時,必須提供f和fprime.

  • gtol:浮點(diǎn)數(shù),可選

當(dāng)梯度的范數(shù)小于 gtol 時停止。

  • norm: 浮點(diǎn)數(shù),可選

用于梯度范數(shù)的順序(-np.Inf 是最小值,np.Inf 是最大值)。

  • epsilon: float 或 ndarray,可選

何時使用的步長fprime是數(shù)值近似的??梢允菢?biāo)量或一維數(shù)組。默認(rèn)為sqrt(eps), 用 eps 表示浮點(diǎn)機(jī)器精度。通常sqrt(eps)約為 1.5e-8。

  • maxiter: int 可選

要執(zhí)行的最大迭代次數(shù)。默認(rèn)為 200 * len(x0) 。

  • full_output: 布爾型,可選

如果為 True,除了 xopt 之外,還返回 fopt、func_calls、grad_calls 和 warnflag。有關(guān)可選返回值的更多信息,請參閱下面的返回部分。

  • disp: 布爾型,可選

如果為 True,則返回收斂消息,然后是 xopt。

  • retall: 布爾型,可選

如果為 True,則將每次迭代的結(jié)果添加到返回值中。

  • callback: 可調(diào)用的,可選的

一個可選的用戶提供的函數(shù),在每次迭代后調(diào)用。稱為callback(xk),其中xk是的當(dāng)前值x0.

下面是返回值

  • xopt: ndarray

最小化 f 的參數(shù),即 f(xopt) == fopt 。

  • fopt: 浮點(diǎn)數(shù),可選

找到最小值,f(xopt)。僅在 full_output 為 True 時返回。

  • func_calls: int 可選

function_calls 的數(shù)量。僅在 full_output 為 True 時返回。

  • grad_calls: int 可選

進(jìn)行的梯度調(diào)用次數(shù)。僅在 full_output 為 True 時返回。

  • warnflag: int 可選

帶有警告狀態(tài)的整數(shù)值,僅在 full_output 為 True 時返回。

  • 0:成功。
  • 1:超過最大迭代次數(shù)。
  • 2 梯度和/或函數(shù)調(diào)用沒有改變??赡鼙砻髟摼葋G失了,即例程沒有收斂。
  • 3:遇到NaN 結(jié)果。
  • allvecs: ndarray 列表,可選

數(shù)組列表,包含每次迭代的結(jié)果。只有當(dāng)retall 為True 時才返回。

下面是一個實(shí)際運(yùn)行的實(shí)例

from scipy import optimize
args = (2, 3, 7, 8, 9, 10)
def f(x,*args): # args是該函數(shù)需要用到的其他值
    u,v=x
    a,b,c,d,e,f=args
    return a*u**2 + b*u*v + c*v**2 + d*u + e*v + f

def gradf(x,*args):
    u,v=x
    a, b, c, d, e, f = args
    gu=2*a*u+b*v+d
    gv=b*u+2*c*v+e
    return np.asarray((gu,gv))
x0 = np.asarray((0, 0))  # 迭代的初始點(diǎn)
res = optimize.fmin_cg(f, x0, fprime=gradf, args=args,full_output=True)
# 直接運(yùn)行的話就會出現(xiàn)下面的東西
'''
Optimization terminated successfully.
         Current function value: 1.617021
         Iterations: 4
         Function evaluations: 8
         Gradient evaluations: 8
'''
# print(res) # [-1.80851064 -0.25531915] # 這是沒有添加full_output=True的時候
# print(type(res)) # <class 'numpy.ndarray'>
# 添加過之后full_output=True
print(res)  # (array([-1.80851064, -0.25531915]), 1.6170212765957448, 8, 8, 0)
print(type(res))  # <class 'tuple'>
# 第一個是代表最小化后的自變量的參數(shù)
# 第二個是函數(shù)的最小值
# 第三個是函數(shù)調(diào)用的次數(shù)
# 第四個是梯度調(diào)用的次數(shù)
# 第五個是帶有警告狀態(tài)的整數(shù)值,返回0表示成功

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論