#python #python-3.x #scipy #scipy-optimize #scipy-optimize-minimize
#python #python-3.x #scipy #scipy-оптимизировать #scipy-оптимизировать-минимизировать
Вопрос:
Я пытаюсь понять документацию по scipy.optimize.least_squares
функции:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html
Возможности ввода немного запутанны, и документация не очень понятна по всем из них. В нем говорится, что аргумент jac
может быть вызываемым, возвращающим a LinearOperator
.
- Я полагаю, предоставленный
LinearOperator
должен представлять якобиан как линейный оператор, отображающий сдвиги переменных в остаточные сдвиги. Или наоборот? - Какие операции мне нужно реализовать для
LinearOperator
? Толькоmatvec
илиmatmat
также? - Действительно ли предоставление a
LinearOperator
вместо полной матрицы Якоби что-нибудь ускоряет? Или полная матрица все равно строится из оператора? (И да, в моем примере оценкаLinearOperator
намного быстрее, чем построение всей матрицы Якоби.)
Ответ №1:
least_squares
ожидает якобиан исходных функций (переменная сдвигается на сдвиги значений). Если вы знаете якобиан для остатков, вам, вероятно, следует переключиться наfmincon
или другую процедуру оптимизации и работать с остатками. Одним из основных преимуществ метода наименьших квадратов является возможность эффективно говорить на языке оригинальных функций вместо остатков.least_squares
вызываетmatmat
,matvec
,rmatvec
, ноLinearOperator
сам может реализоватьmatmat
frommatvec
, если толькоmatvec
это предусмотрено (и наоборот). Но он не может быть реализованrmatvec
безrmatvec
orrmatmat
.- В большинстве случаев требуется только результат
J(x).T.dot(f)
, и полная матрица не хранится. Тем не менее, я заметил некоторую числовую разницу между матрицей и операторами якобианами.