我正在做一个项目,我需要在 NNLS 算法中添加正则化。有没有办法将 Tikhonov 正则化添加到 scipy [1] 的 NNLS 实现中?
[2] 谈论它,但没有显示任何实现。Sklearn 有一个实现,但它不适用于 nnls。
[1] http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.nnls.html
我正在做一个项目,我需要在 NNLS 算法中添加正则化。有没有办法将 Tikhonov 正则化添加到 scipy [1] 的 NNLS 实现中?
[2] 谈论它,但没有显示任何实现。Sklearn 有一个实现,但它不适用于 nnls。
[1] http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.nnls.html
如果你想要解决
受制于
,
那么这很容易实现。构造一个矩阵
和一个向量
。
然后使用您的非负最小二乘求解器
受制于
。
您可以轻松地将其扩展到表单的问题
通过让
和
。
如果 fortran 代码https://github.com/scipy/scipy/blob/master/scipy/optimize/nnls/nnls.f没有 Tikhonov 正则化选项,则可能需要一些工作才能将此功能添加到scipy。
编辑:我看了.pdf。我猜你想找到最小的以便为正。我认为任何给定都有一个或多或少的封闭形式解决方案,并且 .pdf 提到对的二等分搜索,直到你找到最小的一个,这样最好的是正的。这看起来很简单,因为它不需要任何奇怪的分解或凌乱的 fortran 代码。
编辑 2:我注意到这个问题被标记为convex-optimization. 如果您想从字面上采用这种方法,那么您可以尝试 cvx ( http://cvxr.com/cvx/ ) 或 cvxpy ( https://github.com/cvxgrp/cvxpy )。