微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy.optimize.least_squares,参数'jac'的LinearOperator

如何解决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 的可调用对象。

  1. 我想,所提供的 LinearOperator 应该将雅可比矩阵表示为线性运算符,将变量偏移映射到残差偏移。还是反过来?

  2. 我需要为 LinearOperator 实施哪些操作?只有matvec,还是matmat

  3. 提供一个 LinearOperator 而不是完整的雅可比矩阵真的会加速吗?或者无论如何都是由操作员构建的完整矩阵? (是的,在我的示例中,评估 LinearOperator 比构建整个雅可比矩阵快得多。)

解决方法

  1. least_squares 期望原始函数的雅可比行列式(变量转移到值转移)。如果您了解残差的雅可比行列式,您可能应该切换到 fmincon 或其他优化例程并使用残差。最小二乘法的主要优势之一是有机会有效地讨论原始函数的语言而不是残差。
  2. least_squares 调用 matmatmatvecrmatvec,但 LinearOperator 本身可以从 matmat 实现 matvec,如果仅matvec 提供(反之亦然)。但是它不能在没有 rmatvecrmatvec 的情况下实现 rmatmat
  3. 大多数时候只需要 J(x).T.dot(f) 的结果,并且不保存完整矩阵。但是我注意到矩阵和运算符雅可比矩阵之间存在一些数值差异。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。