我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于scipy.optimize函数使用及说明

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于scipy.optimize函数使用及说明

scipy.optimize函数使用

简单使用scipy.optimize,训练逻辑回归损失函数,得到权值。

scipy.optimize模块包含什么?

该scipy.optimize包提供几种常用的优化算法。可以使用详细列表: scipy.optimize(也可以通过help(scipy.optimize)找到)。

该模块包含:

1、使用多种算法(例如BFGS,Nelder-Mead单形,牛顿共轭梯度,COBYLA或SLSQP)对多元标量函数进行无约束和无约束的最小化(最小化)

2、全局(强力)优化例程(例如,盆地跳动,differential_evolution)

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

4、标量单变量函数最小化器(minimum_scalar)和根查找器(牛顿)

5、使用多种算法(例如,混合鲍威尔,莱文贝格-马夸特或大型方法,例如牛顿-克里洛夫)的多元方程组求解器(root)。

使用步骤

1、函数介绍

import numpy as np
from scipy.optimize import minimize

函数入参:

scipy.optimize.minimize(
                       fun,  #可调用的目标函数。
                       x0,  #ndarray,初值。(n,)
                       args=(), #额外的参数传递给目标函数及其导数
                       method=None, #类型的解算器。应该是其中之一:
                                    #‘Nelder-Mead'、‘Powell'
                                    #‘CG'、‘BFGS'
                                    #‘Newton-CG'、‘L-BFGS-B' 
                                    #‘TNC'、‘COBYLA'
                                    #‘SLSQP'、‘dogleg' 
                                    #‘trust-ncg' 

                       jac=None, #目标函数的雅可比矩阵(梯度向量)。
                                 #仅适用于CG, BFGS, Newton-CG, 
                                 #L-BFGS-B, TNC, SLSQP, dogleg,
                                 #trust-ncg。如果jac是一个布尔值,
                                 #且为True,则假定fun将随目标函数返回
                                 #梯度。如果为False,则用数值方法估计梯
                                 #度。Jac也可以是返回目标梯度的可调用对
                                 #象。在这种情况下,它必须接受与乐趣相同
                                 #的论点。
                       hess=None, 
                       hessp=None,#目标函数的Hessian(二阶导数矩阵)或
                                  #目标函数的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中的每个元素,定义该参数的
                                    #边界。当在min或max方向上没有边界
                                    #时,使用None表示其中之一。
                       constraints=(), #约束定义
                                          #(仅适用于COBYLA和SLSQP)
                       tol=None, #终止的边界。
                       callback=None, 
                       options=None)

返回值: res : OptimizeResult

#以OptimizeResult对象表示的优化结果。重要的属性有:x是解决方案数组,
#success是一个布尔标志,指示优化器是否成功退出,以及描述终止原因的消息。

使用scipy.optimize进行优化

首先看一看这个函数的形式

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: 可调用,f(x, *args)

要最小化的目标函数。这里 x 必须是在搜索最小值时要更改的变量的一维数组,而 args 是 f 的其他(固定)参数。

  • x0: ndarray

用户提供的 xopt 初始估计值,即 x 的最优值。它必须是一维值数组。

  • fprime: 可调用,fprime(x, *args),可选

返回 f 在 x 处的梯度的函数。这里 x 和 args 与上面对 f 的说明相同。返回的值必须是一维数组。默认为 None,在这种情况下,梯度是数值近似的(参见下面的 epsilon)。

  • args: 元组,可选

传递给的参数值f和fprime.当需要额外的固定参数来完全指定函数时,必须提供f和fprime.

  • gtol:浮点数,可选

当梯度的范数小于 gtol 时停止。

  • norm: 浮点数,可选

用于梯度范数的顺序(-np.Inf 是最小值,np.Inf 是最大值)。

  • epsilon: float 或 ndarray,可选

何时使用的步长fprime是数值近似的。可以是标量或一维数组。默认为sqrt(eps), 用 eps 表示浮点机器精度。通常sqrt(eps)约为 1.5e-8。

  • maxiter: int 可选

要执行的最大迭代次数。默认为 200 * len(x0) 。

  • full_output: 布尔型,可选

如果为 True,除了 xopt 之外,还返回 fopt、func_calls、grad_calls 和 warnflag。有关可选返回值的更多信息,请参阅下面的返回部分。

  • disp: 布尔型,可选

如果为 True,则返回收敛消息,然后是 xopt。

  • retall: 布尔型,可选

如果为 True,则将每次迭代的结果添加到返回值中。

  • callback: 可调用的,可选的

一个可选的用户提供的函数,在每次迭代后调用。称为callback(xk),其中xk是的当前值x0.

下面是返回值

  • xopt: ndarray

最小化 f 的参数,即 f(xopt) == fopt 。

  • fopt: 浮点数,可选

找到最小值,f(xopt)。仅在 full_output 为 True 时返回。

  • func_calls: int 可选

function_calls 的数量。仅在 full_output 为 True 时返回。

  • grad_calls: int 可选

进行的梯度调用次数。仅在 full_output 为 True 时返回。

  • warnflag: int 可选

带有警告状态的整数值,仅在 full_output 为 True 时返回。

  • 0:成功。
  • 1:超过最大迭代次数。
  • 2 梯度和/或函数调用没有改变。可能表明该精度丢失了,即例程没有收敛。
  • 3:遇到NaN 结果。
  • allvecs: ndarray 列表,可选

数组列表,包含每次迭代的结果。只有当retall 为True 时才返回。

下面是一个实际运行的实例

from scipy import optimize
args = (2, 3, 7, 8, 9, 10)
def f(x,*args): # args是该函数需要用到的其他值
    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))  # 迭代的初始点
res = optimize.fmin_cg(f, x0, fprime=gradf, args=args,full_output=True)
# 直接运行的话就会出现下面的东西
'''
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'>
# 第一个是代表最小化后的自变量的参数
# 第二个是函数的最小值
# 第三个是函数调用的次数
# 第四个是梯度调用的次数
# 第五个是带有警告状态的整数值,返回0表示成功

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于scipy.optimize函数使用及说明

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于scipy.optimize函数使用及说明

这篇文章主要介绍了关于scipy.optimize函数使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-14

关于vue.extend的使用及说明

这篇文章主要介绍了关于vue.extend的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

关于promise.all()的使用及说明

这篇文章主要介绍了关于promise.all()的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-17

关于StringUtils.isBlank()的使用及说明

这篇文章主要介绍了关于StringUtils.isBlank()的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-19

关于Guava缓存详解及使用说明

这篇文章主要介绍了关于Guava缓存详解及使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Pytorch中torch.repeat_interleave()函数使用及说明

这篇文章主要介绍了Pytorch中torch.repeat_interleave()函数使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-03

Pytorch中torch.argmax()函数使用及说明

这篇文章主要介绍了Pytorch中torch.argmax()函数使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-03

python numpy.linalg.norm函数的使用及说明

这篇文章主要介绍了python numpy.linalg.norm函数的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-05

vue中关于$emit和$on的使用及说明

这篇文章主要介绍了vue中关于$emit和$on的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

mybatis中关于in的使用方法及说明

这篇文章主要介绍了mybatis中关于in的使用方法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-27

Pytorch中torch.cat()函数的使用及说明

这篇文章主要介绍了Pytorch中torch.cat()函数的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录