10
votes

Différence entre Scipy.LeastSQ et Scipy.LeasT_squares

Je me demandais quelle différence entre les deux méthodes scipy.optimize.leastsq code> et scipe.optimize.least_squares code> est?

Lorsque je les implémenter, ils produisent des différences minimales dans CHI ^ 2: P>

>>> solution0 = ((p0.fun).reshape(100,100))
>>> # p0.fun are the residuals of my fit function np.ravel'ed as returned by least_squares
>>> print(np.sum(np.square(solution0))) 
0.542899505806

>>> solution1 = np.square((median-solution1))
>>> # solution1 is the solution found by least_sq, it does not yield residuals thus I have to subtract it from the median to get the residuals (my special case)
>>> print(np.sum((solution1)))
0.54402852325


0 commentaires

3 Réponses :


2
votes

dans moins_squares Vous pouvez donner des limites supérieure et inférieure pour chaque variable

Il existe d'autres fonctionnalités que la moindreqq ne fournit pas si vous comparez les Docstrings


0 commentaires


4
votes

La raison clé pour écrire la nouvelle fonction scipy moins_squares est de permettre les limites supérieure et inférieure sur les variables (également appelées "contraintes de la boîte"). C'était une fonctionnalité hautement demandée.

Cet ajout apparemment simple est en fait loin des algorithmes triviaux et requis complètement de nouveaux nouveaux algorithmes, en particulier le dogleg ( méthode = "dogleg" dans au moins_squares ) et la région de confiance réfléchissant ( Méthode = "trf" ), qui permet un traitement robuste et efficace des contraintes de la boîte (détails sur les algorithmes sont donnés dans les références au SCIPY Documentation ).

également important est le support des problèmes à grande échelle et des jacobiens clairsemés.

Lorsque les limites des variables ne sont pas nécessaires, et que le problème n'est pas très grand, les algorithmes de la nouvelle fonction scipe moins_squares ont peu, le cas échéant, en ce qui concerne le Minpeack Levenberg-Marquardt Mise en œuvre utilisée dans l'ancien moinsq un.

Cependant, le même code FORTRAN MINPACK est appelé à la fois par l'ancien moinsq et par le nouveau avec l'option méthode = "lm" . Pour cette raison, l'ancien moinsq est maintenant obsolète et n'est pas recommandé pour le nouveau code.


2 commentaires

Est-il possible de fournir différentes limites sur les variables. Mon problème nécessite que la première moitié des variables soit positive et la seconde moitié à être dans [0,1]. Il est difficile de faire ce correctif?


Bien sûr, chaque variable a sa propre liaison: limites = [(L1, L2, ...), (U1, U2, ...)]