当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.nnls用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.nnls 的用法。

用法:

scipy.optimize.nnls(A, b, maxiter=None, *, atol=None)#

argmin_x || Ax - b ||_2 求解为 x>=0

该问题通常称为NonNegative 最小二乘问题,是一个具有凸约束的凸优化问题。当 x 建模仅可获得非负值的量时,通常会出现这种情况;成分重量、成分成本等。

参数

A (m, n) 数组

系数数组

b (m,) ndarray, 浮点数

右侧向量。

maxiter: int, optional

最大迭代次数,可选。默认值为3 * n

atol: float

算法中用于评估预计残差 (A.T @ (A x - b) 条目与零的接近程度的容差值。增加该值可以放宽解决方案的约束。典型的松弛值可以选择为 max(m, n) * np.linalg.norm(a, 1) * np.spacing(1.) 。该值未设置为默认值,因为范数运算对于大问题来说变得昂贵,因此只能在必要时使用。

返回

x ndarray

解决方案向量。

rnorm 浮点数

残差的 2-范数 || Ax-b ||_2

注意

该代码基于[2],它是[1]经典算法的改进版本。它利用活动集方法并解决非负最小二乘问题的 KKT (Karush-Kuhn-Tucker) 条件。

参考

[1]

:Lawson C.、Hanson R.J.,“解决最小二乘问题”,SIAM,1995,DOI:10.1137/1.9781611971217

[2]

:Bro、Rasmus 和 de Jong、Sijmen,“快速非负约束最小二乘算法”,《化学计量学杂志》,1997 年,DOI:10.1002/(SICI)1099-128X(199709/10)11:5<393::AID-CEM483>3.0.CO;2-L

例子

>>> import numpy as np
>>> from scipy.optimize import nnls
...
>>> A = np.array([[1, 0], [1, 0], [0, 1]])
>>> b = np.array([2, 1, 1])
>>> nnls(A, b)
(array([1.5, 1. ]), 0.7071067811865475)
>>> b = np.array([-1, -1, -1])
>>> nnls(A, b)
(array([0., 0.]), 1.7320508075688772)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.nnls。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。