【002】回归之高级优化“BFGS”

回顾

【001】Python实现,单一变量的线性回归问题中,已经用Python简单实现了单变量的线性回归和梯度下降问题。

BFGS

Scipy类库中,已经实现了很多算法,BFGS L-BFGS等,这些类库帮助我们快速解决问题,而不需要自己进行复杂的编码,有时候也不一定要完全了解其内部的原理。因为涉及到很多高深的数学知识。

如何调用

首先看一下scipy的官方文档对optimize(最优化)的解释说明
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

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

param namedescription
funfun(theta, *args) -> float ,首参数为theta,返回一个浮点数,即计算costFunction
x0Array shape(2,),初步猜测,即传入fun中的theta
args元组,传入fun函数需要的其他参数
methodstring ‘L-BFGS-B’ ‘BFGS’ 等等,详情看官方文档
其他看文档说明

对于之前写的那段代码,我们需要修改一些地方
首先按照官方要求,需要把theta参数放在第一位

def CostFunction(theta,X,y):
    '''
        h(x) = X * theta.T
        Cost =1/(2m)*sum[(h(x) - y)^2]
    '''
    len = X.shape[0]
    j = np.power(X.dot(np.transpose(theta)) - y,2)
    return np.sum(j) / (2 * len)

然后再导入必要的包,并且调用minimize

import scipy as sp
    from scipy.optimize import minimize
    mini = minimize(CostFunction,
                   x0=theta,
                   args=(X,boston_target),
                   method='BFGS')
    print(mini)

打印结果:
      fun: 14.733068874736421
 hess_inv: array([[ 1.24250516e+01, -1.69448468e-01],
       [-1.69448468e-01,  2.51313376e-03]])
      jac: array([ 1.19209290e-07, -4.29153442e-06])
  message: 'Optimization terminated successfully.'
     nfev: 32
      nit: 6
     njev: 8
   status: 0
  success: True
        x: array([31.27662827, -0.12489439])
        x就是拟合后的theta系数 shape:(2,)

绘图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值