如何解决scipy.optimize.least_squares,参数'jac'的LinearOperator
我正在尝试了解有关 scipy.optimize.least_squares
函数的文档:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html
输入的可能性有点混乱,而且所有的文档都不是很清楚。它说参数 jac
可以是一个返回 LinearOperator
的可调用对象。
-
我想,所提供的
LinearOperator
应该将雅可比矩阵表示为线性运算符,将变量偏移映射到残差偏移。还是反过来? -
我需要为
LinearOperator
实施哪些操作?只有matvec
,还是matmat
? -
提供一个
LinearOperator
而不是完整的雅可比矩阵真的会加速吗?或者无论如何都是由操作员构建的完整矩阵? (是的,在我的示例中,评估LinearOperator
比构建整个雅可比矩阵快得多。)
解决方法
-
least_squares
期望原始函数的雅可比行列式(变量转移到值转移)。如果您了解残差的雅可比行列式,您可能应该切换到fmincon
或其他优化例程并使用残差。最小二乘法的主要优势之一是有机会有效地讨论原始函数的语言而不是残差。 -
least_squares
调用matmat
、matvec
、rmatvec
,但LinearOperator
本身可以从matmat
实现matvec
,如果仅matvec
提供(反之亦然)。但是它不能在没有rmatvec
或rmatvec
的情况下实现rmatmat
。 - 大多数时候只需要
J(x).T.dot(f)
的结果,并且不保存完整矩阵。但是我注意到矩阵和运算符雅可比矩阵之间存在一些数值差异。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。