python玄学建模(3):最小二乘

(咕了半年后的第一篇博客,不知道还有没有人看...)

照例还是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(funx0jac='2-point'bounds=(-infinf)method='trf'ftol=1e-08xtol=1e-08gtol=1e-08x_scale=1.0loss='linear'f_scale=1.0diff_step=Nonetr_solver=Nonetr_options={}jac_sparsity=Nonemax_nfev=Noneverbose=0args=()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函数的基本用法。`

猜你喜欢

转载自www.cnblogs.com/xsxsz/p/11355136.html