scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题。

scipy.optimize包提供了几种常用的优化算法。 该模块包含以下几个方面

  • 使用各种算法(例如BFGS,Nelder-Mead单纯形,牛顿共轭梯度,COBYLA或SLSQP)的无约束和约束最小化多元标量函数(minimize())
  • 全局(蛮力)优化程序(例如,anneal(),basinhopping())
  • 最小二乘最小化(leastsq())和曲线拟合(curve_fit())算法
  • 标量单变量函数最小化(minim_scalar())和根查找(newton())
  • 使用多种算法(例如,Powell,Levenberg-Marquardt混合或Newton-Krylov等大规模方法)的多元方程系统求解

在用python实现逻辑回归和线性回归时,使用梯度下降法最小化cost function,用到了fmin_tnc()和minimize()。

一、fmin_tnc()

有约束的多元函数问题,提供梯度信息,使用截断牛顿法。

调用:

scipy.optimize.fmin_tnc(func, x0, fprime=None, args=(), approx_grad=0, bounds=None, epsilon=1e-08, scale=None, offset=None, messages=15, maxCGit=-1, maxfun=None, eta=-1, stepmx=0, accuracy=0, fmin=0, ftol=-1, xtol=-1, pgtol=-1, rescale=-1, disp=None, callback=None)

最常使用的参数:

func:优化的目标函数

x0:初值

fprime:提供优化函数func的梯度函数,不然优化函数func必须返回函数值和梯度,或者设置approx_grad=True

approx_grad :如果设置为True,会给出近似梯度

args:元组,是传递给优化函数的参数

返回:

x : 数组,返回的优化问题目标值

nfeval : 整数,function evaluations的数目

在进行优化的时候,每当目标优化函数被调用一次,就算一个function evaluation。在一次迭代过程中会有多次function evaluation。这个参数不等同于迭代次数,而往往大于迭代次数。

rc : int,Return code, see below

例子:

result = opt.fmin_tnc(func=costf_reg,x0=theta,args=(X,y,1),fprime=gredient_reg)

(array([ 1.27271026, 1.18111686, 0.62529965, -1.43166928, -0.91743189,
-2.01987399, -0.17516292, -0.35725404, -0.36553118, 0.12393227,
-1.19271299, -0.27469165, -0.61558556, -0.05098418, -1.45817009,
-0.45645981, -0.29539513, -0.27778949, -0.04466178, -0.206033 ,
-0.2421784 , -0.92467487, -0.1438915 , -0.32742405, 0.0155576 ,
-0.29244868, 0.02779373, -1.04319154]), 32, 1)

二、minimize()

调用:

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

参数:

fun :优化的目标函数

x0 :初值,一维数组,shape (n,)

args : 元组,可选,额外传递给优化函数的参数

method:求解的算法,选择TNC则和fmin_tnc()类似

jac:返回梯度向量的函数

返回:

返回优化结果对象,x:优化问题的目标数组。success: True表示成功与否,不成功会给出失败信息。

例子:

result = opt.minimize(fun=costf_reg, x0=theta, args=(X,y,2), method='TNC')
print(result)

fun: 0.5740215331747713
jac: array([-1.11983756e-03, -3.17176285e-03, 1.66888725e-04, -3.80251386e-04,
5.17319521e-04, 5.48006085e-05, -1.71642700e-03, -9.40103551e-04,
2.54840593e-04, 1.63347114e-04, -4.23616697e-04, 9.04154529e-04,
-7.58726415e-05, 3.3874014……])
message: 'Converged (|f_n-f_(n-1)| ~= 0)'
nfev: 192
nit: 20
status: 1
success: True
x: array([ 0.89832911, 0.72816704, 0.32672603, -0.8722403 , -0.49704549,
-1.37221312, -0.16553916, -0.29805388, -0.18577737, 0.02011522,
-0.78541694, -0.0979966 ,…… ])

参考:https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()的更多相关文章

  1. python scipy优化器模块(optimize)

    pyhton数据处理与分析之scipy优化器及不同函数求根 1.Scipy的优化器模块optimize可以用来求取不同函数在多个约束条件下的最优化问题,也可以用来求取函数在某一点附近的根和对应的函数值 ...

  2. scipy优化器optimizer

    #optimazer优化器 from scipy.optimize import minimize def rosem(x): return sum(100.0*(x[1:]-x[:-1])**2.0 ...

  3. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  4. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数 在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 .也称为 R ...

  5. 数值最优化:一阶和二阶优化算法(Pytorch实现)

    1 最优化概论 (1) 最优化的目标 最优化问题指的是找出实数函数的极大值或极小值,该函数称为目标函数.由于定位\(f(x)\)的极大值与找出\(-f(x)\)的极小值等价,在推导计算方式时仅考虑最小 ...

  6. TensorFlow中的优化算法

    搭建好网络后,常使用梯度下降类优化算法进行模型参数求解,模型越复杂我们在训练神经网络的过程上花的时间就越多,为了解决这一问题,我们就需要找一些优化算法来提高训练速度,TF的tf.train模块中提供了 ...

  7. 《深度学习-改善深层神经网络》-第二周-优化算法-Andrew Ng

    目录 1. Mini-batch gradient descent 1.1 算法原理 1.2 进一步理解Mini-batch gradient descent 1.3 TensorFlow中的梯度下降 ...

  8. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  9. 基于网格的分割线优化算法(Level Set)

    本文介绍一种网格分割线的优化算法,该方法能够找到网格上更精确.更光滑的分割位置,并且分割线能够自由地合并和分裂,下面介绍算法的具体原理和过程. 曲面上的曲线可以由水平集(level set)形式表示, ...

随机推荐

  1. 国内OLED产业与三星到底是差之千里还是近在咫尺?

    此前,市面上几乎大部分智能手机搭载的刘海屏,都是来自三星的AMOLED屏幕.虽然三星总是被诟病为中国手机厂商提供的是"次品",不过没办法,OLED屏幕的核心技术.产能等都掌握在三星 ...

  2. python奇淫技巧之 抽屉 自动点赞

    前言 嘿,各位小伙伴晚上好呀,今天又给大家带来干货内容啦,今天带来的是,如何自动登录抽屉,并且点赞 原计划打算,是不打算使用selenium的,但是因为要涉及点赞,所以免不了登录,但是我又被啪啪打脸了 ...

  3. Swift保存RSA密钥到Keychain

    https://www.jianshu.com/p/c1e9bffc76f4 最近项目的需求用到RSA的加密解密,并且需要把公钥信息保存到Keychain里面,网上很多文章都是用Keychain保存账 ...

  4. HZNU-ACM寒假集训Day4小结 最短路

    最短路 1.Floy 复杂度O(N3)  适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...

  5. 51nod 1346:递归

    1346 递归 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 函数f(n,m) { 若n=1或m=1返回a[n][m]; 返回f(n-1,m)异或 ...

  6. Zookeeper--命令介绍

    参考 https://zookeeper.apache.org/doc/r3.4.13/zookeeperStarted.html#sc_ConnectingToZooKeeper 连接到zookee ...

  7. Springboot 2.x 如何解决重复提交 (本地锁的实践)

    有没有遇到过这种情况:网页响应很慢,提交一次表单后发现没反应,然后你就疯狂点击提交按钮(12306就经常被这样怒怼),如果做过防重复提交还好,否则那是什么级别的灾难就不好说了... 本文主要是应用 自 ...

  8. JFrame的面板结构和JPanel的使用

    JFrame图解结构 有一窗口框架实例:JFrame win = new JFrame("窗口");在new JFrame()时,构建了JFrame实例对象,在实例中的Layere ...

  9. 使用Map,统计字符串中每个字符出现的次数

    package seday13; import java.util.HashMap; import java.util.Map; /** * @author xingsir * 统计字符串中每个字符出 ...

  10. dll hook 共享内存数据

    unit UnitDll; interface uses Windows; * ; // 文件映射到内存的大小 const HOOK_MEM_FILENAME = 'MEM_FILE'; // 映像文 ...