當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。