optimize_optimizer - CSDN
精华内容
参与话题
  • python科学计算之scipy——optimize

    万次阅读 2017-11-15 21:40:32
    写在前面SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录。非线性方程组求解SciPy中对非线性方程组求解是fslove()函数,它的调用形式一般为fslove(fun, x0),fun是计算非线性方程组的误差函数,它...

    写在前面

    SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录。

    非线性方程组求解

    SciPy中对非线性方程组求解是fslove()函数,它的调用形式一般为fslove(fun, x0),fun是计算非线性方程组的误差函数,它需要一个参数x,fun依靠x来计算线性方程组的每个方程的值(或者叫误差),x0是x的一个初始值。

    """
    计算非线性方程组:
        5x1+3 = 0
        4x0^2-2sin(x1x2)=0
        x1x2-1.5=0
    """
    ## 误差函数
    def fun(x):
        x0,x1,x2 = x.tolist()
        return[5*x1+3,4x0^2-2sin(x1x2),x1x2-1.5]
    
    result = optimize.fsolve(fun,[1,1,1])
    ## result
    [-0.70622057    -0.6    -2.5]

    在计算非线性方程中的解时,比如像坐标上升算法,其中需要用到未知数的导数,同样,scipy的fslove()也提供了fprime参数传递未知数的雅各比矩阵从而加速计算,传递的雅各比矩阵每一行时某一方程对各个未知数的导数。对于上面的例子,我们可以写下如下的雅各比矩阵传入。

    def j(x):
        x0,x1,x2 = x.tolist()
        return[[0,5,0],[8*x0,-2*x2*cos(x1*x2],[0,x2,x1]]
    
    result = optimize.fsolve(fun,[1,1,1],fprime=j)
    #result
    [-0.70622057    -0.6    -2.5]

    scipy的内部在实现fslove时应该时应该是利用了坐标上升算法或者梯度相关优化算法,但本人没有考证,有兴趣的可以看看源码。

    最小二乘拟合

    关于最小二乘算法的理论这里并不想谈,网上解释的文章也挺多,在 optimize模块中,可以使用leastsq()对数据进行最小二乘拟合计算。 leastsq()的用法很简单,只需要将计箅误差的函数和待确定参数的初始值传递给它即可。

    x = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])
    y = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])
    def residual(p):
        k,b = p
        return y-(k*x+b)
    r = optimize.leastsq(residual,[1,0])
    k,b = r[0]
    # print k
    0.613495349193
    # print b
    1.79409254326
    def func(x,p):
        """
            计算的正弦波 :A*sin(2*pi*k*x+theta)
        """
        A,k,theta = p
        return A*sin(2*np.pi*k*x+theta)
    
    def redis(p,y,x):
        return y-func(x,p)
    
    x = np.linspace(0,2*np.pi,100)
    A,k,theta = 10,0.34,np.pi/6
    y0 = func(x,[A,k,theta])
    # 加入噪声
    np.random.seed(0)
    y1 = y0+2*np.random.randn(len(x))
    p0 = [7,0.40,0]
    # p0是A,k,theta的初始值,y1,x要拟合的数据
    plsq = optimize.leastsq(redis, p0,args=(y1,x))
    print [A,k,theta]  #真是的参数值
    print plsq[0]    #拟合后的参数值
    

    对于像正弦波或者余弦波的曲线拟合,optimize提供curve_fit()函数,它的使用方式和leastq()稍有不同,它直接计算曲线的值,比如上面的拟合正弦波可以用cureve_fit()来写。

    def func2(x,p):
        """
            计算的正弦波 :A*sin(2*pi*k*x+theta)
        """
        A,k,theta = p
        return A*sin(2*np.pi*k*x+theta)
    ret,_=optimize.curve_fit(func2,x,y1,p0=p0)

    该函数有一个缺点就是对于初始值敏感,如果初始频率和真实频率值差太多,会导致最后无法收敛到真是频率。

    局部最小值

    optimize模块还提供了常用的最小值算法如:Nelder-Mead、Powell、CG、BFGS、Newton-CG等,在这些最小值计算时,往往会传入一阶导数矩阵(雅各比矩阵)或者二阶导数矩阵(黑塞矩阵)从而加速收敛,这些最优化算法往往不能保证收敛到全局最小值,大部分会收敛到局部极小值。这些函数的调用方式为:

    optimize.minimize(target_fun,init_val,method,jac,hess)
    target_fun:函数的表达式计算;
    init_val:初始值;
    method:最小化的算法;
    jac:雅各比矩阵
    hess:黑塞矩阵。

    全局最小值算法

    全局最小值使用optimize.basinhopping()来实现,这个函数首先要定义一个误差计算方式,比如平方误差函数,niter时迭代的次数,最后还需要一个局部极小值优化方法,minimizer_kwargs传入。比如上面的正弦函数拟合:

    def func1(x,p):
        """
            计算的正弦波 :A*sin(2*pi*k*x+theta)
        """
        A,k,theta = p
        return A*sin(2*np.pi*k*x+theta)
    def func_error(p,y,x):
        return np.sum((y-func1(x,p)**2)
    result = optimize.basinhopping(func_error,[1,1,1],niter=10,
                                minimizer_kwargs={"method":"L-BFGS-B",
                                                    "args":(y1,x1)})
    ## [1,1,1]是传入的初始值,args是需要拟合的数据
    展开全文
  • MySQL中optimize优化表

    万次阅读 热门讨论 2016-05-23 22:09:17
    前言当对MySQL进行大量的增...但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化。 为了更加直观的看到数据碎片,Mysql可以使用如下命令查看 show table status [like table_n

    前言

    当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间,所以可能会出现删除很多数据后,数据文件大小变化不大的现象。当然新插入的数据仍然会利用这些碎片。但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化。
    为了更加直观的看到数据碎片,Mysql可以使用如下命令查看
    show table status [like table_name]
    如下图
    这里写图片描述
    data_free选项代表数据碎片。
    针对MySQL的不同数据库存储引擎,在optimize使用清除碎片,回收闲置的数据库空间,把分散存储(fragmented)的数据和索引重新挪到一起(defragmentation),对I/O速度有好处。
    当然optimize在对表进行操作的时候,会加锁,所以不宜经常在程序中调用。

    MyISAM存储引擎

    针对MyISAM表,直接使用如下命令进行优化
    optimize table table1[,table2][,table3]
    如果同时优化多个表可以使用逗号分隔。
    下面优化dede_member_vhistory表,可以看出,优化后data_free值为0。
    这里写图片描述
    #InnoDB存储引擎
    InnoDB引擎的表分为独享表空间和同享表空间的表,我们可以通过show variables like ‘innodb_file_per_table’;来查看是否开启独享表空间。

    我本地是开启了独享表空间的。此时是无法对表进行optimize操作的,如果操作,会返回如图信息,最后的一条Table does not support optimize, doing recreate + analyze instead。因为该结构下删除了大量的行,此时索引会重组并且会释放相应的空间因此不必优化。
    这里写图片描述

    展开全文
  • Scipy.Optimize

    千次阅读 2019-06-14 09:01:10
    1.Scipy.Optimize.Minimize 例子1:数学问题,非线性函数在约定条件下求解最小值问题 例子2:机器学习寻找参数 1.Scipy.Optimize.Minimize Source: ...

    目录

    1.Scipy.Optimize.Minimize

    例子1:数学问题,非线性函数在约定条件下求解最小值问题

    例子2:机器学习寻找参数


     

    1.Scipy.Optimize.Minimize

    Source:   https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

     

    scipy.optimize.minimize(funx0args=()method=Nonejac=Nonehess=Nonehessp=Nonebounds=Noneconstraints=()tol=Nonecallback=Noneoptions=None)[source]

    fun callable

    The objective function to be minimized.

    fun(x, *args) -> float

    where x is an 1-D array with shape (n,) and args is a tuple of the fixed parameters needed to completely specify the function.

    #x是一维数组,目标函数所需的固定参数的元组,由后面的args初始化

    x0 ndarray, shape (n,)

    Initial guess. Array of real elements of size (n,), where ‘n’ is the number of independent variables.

    #初始化自变量参数

    args tuple, optional

    Extra arguments passed to the objective function and its derivatives (funjacand hess functions).

    #传递给目标函数的额外参数

    method:  str or callable, optional

    Method for computing the gradient vector.  

    #计算梯度的方法

    例子1:数学问题,非线性函数在约定条件下求解最小值问题

    Source:http://apmonitor.com/che263/index.php/Main/PythonOptimization

    min x1x4(x1+x2+x3)+x3 

    s.t.

    x1x2x3x4 \geq 25

    x1^{2} + x2^{2} + x3^{2} + x4^{2} = 40

    1 \leq x1,x2,x3,x4 \leq 5

    x0 = (1,5,5,1)

    Scipy.Optimize.Minimize is demonstrated for solving a nonlinear objective function

    subject to general inequality and equality constraints.

    def objective(x):
        x1 = x[0]
        x2 = x[1]
        x3 = x[2]
        x4 = x[3]
        return x1*x4*(x1+x2+x3)+x3
    
    def constraint1(x):
        return x[0]*x[1]*x[2]*x[3]-25.0
    
    def constraint2(x):
        sum_sq = 40
        for i in range(4):
            sum_sq = sum_sq - x[i]**2
        return sum_sq
    x0 = [1, 5 , 5, 1]
    print(objective(x0))
    #16
    
    b = (1.0 , 5.0)
    bnds = (b,b,b,b)
    cons1 = {'type' : 'ineq' , 'fun' : constraint1}
    cons2 = {'type' : 'eq' , 'fun' : constraint2}
    cons = [cons1,cons2]
    sol = minimize(objective, x0, method='SLSQP', bounds=bnds, constraints=cons)
    print(sol)
        fun: 17.01401724563517
         jac: array([14.57227015,  1.37940764,  2.37940764,  9.56415057])
     message: 'Optimization terminated successfully.'
        nfev: 30
         nit: 5
        njev: 5
      status: 0
     success: True
           x: array([1.        , 4.7429961 , 3.82115462, 1.37940765])

    例子2:机器学习寻找参数

    在吴恩达cs229的机器学习

    作业1中 linear_regression中,通过Gradient Descent方法,设置学习率,循环次数,进行寻找参数

    而在作业2中 logistic_regression中,我们采用scipy.optimize,minimize,去寻找参数。

    详细细节,请参考作业,这里只贴出关键代码

    Source : https://study.163.com/course/courseMain.htm?courseId=1004570029&_trace_c_p_k2_=00b4467624554d9fae0c292a58af0a45

    theta = theta=np.zeros(3) 
    
    def cost(theta, X, y):
        costf = np.mean(-y * np.log(sigmoid(X.dot(theta))) - (1 - y) * np.log(1 - sigmoid(X @ theta)))
        return costf
    
    def gradient(theta, X, y):   
        grad = (1 / len(X)) * X.T @ (sigmoid(X @ theta) - y)
        return grad
    import scipy.optimize as opt
    res = opt.minimize(fun=cost, x0=theta, args=(X, y), method='Newton-CG', jac=gradient)
    print(res)


     

    展开全文
  • R语言中,常用的优化函数知多少,这次将介绍optimize,optimise,optim这三个做优化的函数,也是目前最常用到的优化函数。 做一元的优化:只有要给参数 optimize,optimise,此外,optim也可以做一元优化。前面两个...

    R语言中,常用的优化函数知多少,这次将介绍optimize,optimise,optim这三个做优化的函数,也是目前最常用到的优化函数。

    做一元的优化:只有要给参数
    optimize,optimise,此外,optim也可以做一元优化。前面两个较为常用些。

    这两个函数的用法是相同的,先给定函数,指定参数的取值函数,再从取值范围中优化,对于凸函数,能够取到全局最优解,对于非凸函数,可能取到局部最优解。

    函数

    optimize(f, interval, ..., lower = min(interval), upper = max(interval),
             maximum = FALSE,
             tol = .Machine$double.eps^0.25)
    optimise(f, interval, ..., lower = min(interval), upper = max(interval),
             maximum = FALSE,
             tol = .Machine$double.eps^0.25)

    这里,f表示函数,interval是取值的区间,lower是区间下界,upper是区间上界,maximum用于指定是最大优化问题还是最小优化问题,tol是计算的精度设置。

    =====================

    该区域用于描述optimize和optimise函数的核心优化思想,待下次完善。
    关键点:以供下次注意理解点。

    The first evaluation of f is always at x_1 = a + (1-φ)(b-a) where (a,b) = (lower, upper) and phi = (sqrt(5) - 1)/2 = 0.61803.. is the golden section ratio. Almost always, the second evaluation is at x_2 = a + phi(b-a). Note that a local minimum inside [x_1,x_2] will be found as solution, even when f is constant in there, see the last example.

    =====================

    案例学习:
    第一类:凸问题

    f <- function (x) (x - 1/3)^2
    plot(f,xlim = c(0,1))

    这里写图片描述

    xmin <- optimize(f, c(0, 1), tol = 0.0001)
    xmin

    结果

    $minimum
    [1] 0.3333333
    
    $objective
    [1]0

    极小值时,x取值为0.3333333 ,函数的值为0

    第二种,非凸问题

    
    f=function(x) x*sin(10*pi*x)+1
    curve(f,xlim=c(-2,1))

    这里写图片描述

    从图来看,是波动的,存在好多极小值或极大值。

    optimize(f,c(-2,1),tol=0.0001,maximum=T)

    结果

    $maximum
    [1] -1.050968
    
    $objective
    [1] 2.050482
    

    当函数取最大值时,它对应的x取值为-1.050968,显然在-2到1的范围内,非最佳的极大值。此时,对应的目标函数为2.050482.

    多元优化问题,即存在多个参数待求解。
    optim函数,对于多个参数的多元优化,设置为theta一个参数,取theta1 = theta[1],theta2 = theta[2],…依次类推。

    函数,有两个

    optim(par, fn, gr = NULL, ...,
          method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
                     "Brent"),
          lower = -Inf, upper = Inf,
          control = list(), hessian = FALSE)
    
    optimHess(par, fn, gr = NULL, ..., control = list())

    对于多元的,它的求解难度较大,涉及到的优化算法很多,对于不同类型的算法,其适用范围也有所不一样。

    这里暂时给出demo,下次再来完善。

    require(graphics)
    
    fr <- function(x) {   ## Rosenbrock Banana function
        x1 <- x[1]
        x2 <- x[2]
        100 * (x2 - x1 * x1)^2 + (1 - x1)^2
    }
    optim(c(-1.2,1), fr)

    初始值为-1.2和1

    $par
    [1] 1.000260 1.000506
    
    $value
    [1] 8.825241e-08
    
    $counts
    function gradient 
         195       NA 
    
    $convergence
    [1] 0
    
    $message
    NULL

    计算得到的参数最佳结果为1.000260和1.000506。

    注意:需要完善的有

    • optimize
    • optimise
    • optim
    • optimHess
    • 优化算法的适用范围:”Nelder-Mead”,”BFGS”,”CG”,”L-BFGS-B”,”SANN”,”Brent”
    展开全文
  • Scipy教程 - 优化和拟合库scipy.optimize

    万次阅读 2016-04-09 18:22:42
    最优化函数库Optimization 优化是找到最小值或等式的数值解的问题。scipy.optimization子模块提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。...from scipy import optimize 皮皮blog
  • scipy.optimize优化器的各种使用

    万次阅读 多人点赞 2019-02-22 22:33:53
    0.scipy.optimize.minimize 1.无约束最小化多元标量函数 1.1Nelder-Mead(单纯形法)  1.2拟牛顿法:BFGS算法 1.3牛顿 - 共轭梯度法:Newton-CG 2 约束最小化多元标量函数 2.1SLSQP(Sequential Least ...
  • Table does not support optimize, doing recreate + analyze instead 提要: 1.MySQL官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可。 2.OPTIMIZE TABLE只对...
  • Optimize SQL

    2019-03-15 01:01:05
    NULL 博文链接:https://justshare.iteye.com/blog/317719
  • innodb数据库 OPTIMIZE TABLE 提示Table does not support optimize, doing recreate + analyze instead 分类: Mysql2014-09-24 14:09 2559人阅读 评论(0) 收藏 举报 Table does not support ...
  • python科学计算——scipy.optimize

    千次阅读 2019-09-05 10:14:39
    SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录。 非线性规划(scipy.optimize.minimize) 一.背景: 现...
  • minimize函数的使用(scipy.optimize)

    千次阅读 2019-11-23 23:46:44
    fminunc在python中的替代函数minimize
  • 今天在看CU的时候,发现有人问有关optimize来表优化的问题,当年因为这个问题,困扰我很长一段时间,今天有空我把这个问题,用实际数据来展示出来,让大家可以亲眼来看看,optimize table的重要作用,而不是似是而非...
  • 4.3 拟合与求解optimize模块

    千次阅读 2017-06-29 22:08:13
    SciPy的optimize模块提供了许多数值优化的算法,一些经典的优化算法包括线性回归、函数极值和根的求解以及确定两函数交点的坐标等。下面首先介绍简单的线性回归模型,然后逐渐深入解决非线性数据拟合问题。 4.3.1...
  • 案例 - optimize table 的一些坑

    千次阅读 2017-08-17 21:01:11
    线上IM消息的数据库,磁盘空间使用率已到达96%没申请到扩容的新机器,无法做数据库迁移保留的是全量聊天记录,一条都不许删在这种场景下,为了减少空间容量,只能对表做碎片整理来释放空间, optimize table当我们...
  • optimize table tablename

    2016-05-02 23:25:00
    optimize 优化表OPTIMIZE 命令支持的引擎MyIsam, InnoDB, ARCHVE当对表有大量的增删改操作时,需要用optimize对表进行优化,可以减少空间与提高I/O性能,命令optimize table tablename; 1.假如有session表且存储引擎为...
  • python 非线性规划(scipy.optimize.minimize)

    万次阅读 多人点赞 2018-08-09 13:48:34
    一.背景:现在项目上有一个用python 实现非线性规划的需求。非线性规划可以简单分两种,目标函数为凸函数 or 非凸函数。 凸函数的 非线性规划,比如fun=x^2+y^2+x*y,有很多常用的python库来完成,网上也有很多资料...
  • optimize 优化mysql数据表   1、先来看看多次删除插入操作后的表索引情况mysql> SHOW INDEX FROM `tbl_name`; +----------+------------+------------+--------------+-------------+-----------+...
  • 1、analyze table优化表的统计信息 mysql> show index from t; +-------+------------+---------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------...
  • mysql optimize innodb 优化

    千次阅读 2018-05-26 00:03:14
    如果对mysql表,进行大...请参考:实例说明optimize table在优化mysql时很重要1、删除数据,并尝试优化mysql&gt; delete FROM `test` WHERE d_id&gt;397136; Query OK, 306356 rows affected (19.48 sec...
  • MySql 的Optimize

    2020-08-04 13:39:25
    1、optimize优化原理 对mysql进行大量增删改操作,磁盘上的空间没有被立即收回(数据空间、索引位),而是等待新的数据来填充空缺 -- 这些空间可以被后续的insert操作利用,但如果记录是变长的,那么不是所有的...
1 2 3 4 5 ... 20
收藏数 118,490
精华内容 47,396
关键字:

optimize