(咕了半年后的第一篇博客,不知道还有没有人看...)
照例还是scipy官方文档的翻译及解释,不过是基于最新的1.3.0版本
文档链接:https://docs.scipy.org/doc/scipy-1.3.0/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares
函数原型:scipy.optimize.
least_squares
(fun, x0, jac='2-point', bounds=(-inf, inf), method='trf', ftol=1e-08, xtol=1e-08, gtol=1e-08, x_scale=1.0, loss='linear', f_scale=1.0, diff_step=None, tr_solver=None, tr_options={}, jac_sparsity=None, max_nfev=None, verbose=0, args=(), kwargs={})
重要参数解释:
fun:传入的损失函数(cost function),也就是优化的对象;
x0:一维数组(单个float型输入会被视为只有一个元素的数组),即优化的起始点,这里的最小二乘不是解析解法而是迭代求得的局部最优解,所以和起始点的设定相当重要;
bounds:求解的范围,具体形式可见第一篇博客;
mathod:优化算法,支持的三种算法可见文档链接,默认算法为'trf',即Trust Region Reflective algorithm,适用于大规模稀疏问题的求解;
loss:对损失函数的处理,默认的'linear'即不对loss做任何处理(标准的最小二乘法),此外可选smooth l1,huber等平滑方式;
verbose:可选0(不输出任何消息),1(结束后输出报告),2(输出迭代过程),默认为0,如果想看优化报告可以自行调整。
主要参数也就是这些,其他的参数用到的相对较少,如果有需要可以查看官方文档。
返回值是scipy优化问题标准的OptimizeResult类,最重要的属性是x:优化后的参数,还有status:状态码。具体内容可以查看链接:https://docs.scipy.org/doc/scipy-1.3.0/reference/generated/scipy.optimize.OptimizeResult.html?highlight=optimizeresult
文档中也给出了相应的示例:
>>> def fun_rosenbrock(x): #还是rosenbrock函数 ... return np.array([10 * (x[1] - x[0]**2), (1 - x[0])]) >>> from scipy.optimize import least_squares >>> x0_rosenbrock = np.array([2, 2]) >>> res_1 = least_squares(fun_rosenbrock, x0_rosenbrock) >>> res_1.x #优化后的参数 array([ 1., 1.]) >>> res_1.cost ] 9.8669242910846867e-30 >>> res_1.optimality 8.8928864934219529e-14
以上就是scipy库中least_squares函数的基本用法。`