Comment intégrer le polynôme de données avec les barres d'erreur
Je suis actuellement en utilisant numpy.polyfit(x,y,deg) pour ajuster un polynôme à des données expérimentales. Je tiens cependant à s'adapter à un polynôme qui utilise la pondération basée sur les erreurs des points.
J'ai trouvé scipy.curve_fit ce qui rend l'utilisation de poids et je suppose que je pourrais juste mettre la fonction, 'f', à la forme d'un polynôme de mon ordre souhaité, et de mettre mon poids dans 'sigma', qui devrait atteindre mon objectif.
Je me demandais est-il un autre, la meilleure manière de faire ceci?
Merci Beaucoup.
OriginalL'auteur Jdog | 2011-07-12
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à http://scipy-cookbook.readthedocs.io/items/FittingData.html en particulier, la section Montage d'une loi de puissance pour des données avec des erreurs". Il montre comment utiliser scipy.optimiser.leastsq avec une fonction qui comprend erreur de pondération.
Ce n'est pas grave, le leastsq de montage est adapté pour les fonctions linéaires (linéaire dans les paramètres), ce qui est vrai pour polynominals. Vous avez juste à définir votre fonction à minimiser f(x) = (data - model(x))/(erreur de données). Vous pesez par l'inverse de l'erreur sur vos données. Découvrez en.wikipedia.org/wiki/Least_squares#Weighted_least_squares
Je viens de vérifier les docs de
scipy.curve_fit
il fait la même chose que je suggère. Il utilise la méthode des moindres carrés et pèse sans doute la somme des carrés de 1/sigma**2.Ok, tout va se mettre en place à l'aide de curve_fit. Merci.
Notez que la méthode décrite dans le lien fait propage l'erreur dans l'ajustement des valeurs. J'ai eu un moment difficile de trouver un autre exemple qui ne fait de cette.
OriginalL'auteur Bernhard
Pour pondérée polynôme de montage vous pouvez utiliser:
voir http://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyfit.html
Important de noter que, dans cette fonction, le poids devrait pas être fourni comme
1/variance
(qui est la forme habituelle dans de nombreux pondérée des applications), mais comme1/sigma
Bien que
curve_fit
etleastsq
sont beaucoup plus généraux et les plus puissants outils d'optimisation depolyfit
(dans la mesure où ils peuvent s'adapter à tout fonction),polyfit
a l'avantage qu'il donne une (exact) solution analytique et est donc probablement beaucoup plus rapide que itératif des méthodes d'approximation commecurve_fit
etleastsq
- en particulier dans le cas de montage des polynômes à plusieurs ensembles de y-données (obtenus à la même x-vecteur)Mise à jour: de numpy la version 1.7,
numpy.polyfit
aussi prend du poids comme une entrée (qui idéalement devrait être fourni comme1/sigma
, pas1/variance
)1/sigma
au lieu de1/sigma**2
? (La documentation clairement et explicitement d'accord avec vous que c'est1/sigma
et pas1/sigma**2
).OriginalL'auteur Rolf Bartstra
Voici comment je l'ai fait, avec beaucoup de commentaires!
Note: je l'ai fait avec qth et polynôme d'ordre n s'adapte.
xerr
etyerr
) dans la construction de l'approximation polynomiale.OriginalL'auteur 8765674