Question

Je recherche une "méthode" pour obtenir une formule, une formule provenant de l'ajustement d'un ensemble de données (3000 points). J'utilisais Legendre Polynomial, mais pour> 20 points, il ne donne pas de valeurs exactes. Je peux écrire le test CHI2, mais l'algorithme a besoin d'un butin de temps pour calculer n paramètres, et au début, je ne sais pas à quoi ressemble la fonction, donc cela prend du temps. Je pensais aux splines ... peut-être ...

Donc l'entrée est: 3000 pintes

Sortie: f (x) = ... quelque chose

Je veux avoir une formule de l'ajustement. Quelle est la meilleure façon de faire cela dans Python?

Que la force serait avec nous! Nykon

Était-ce utile?

La solution

Que diriez-vous d'un ajustement polynomial:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

ou un autre schéma d'interpolation:

http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html

Il est difficile de recommander une méthode appropriée sans en savoir plus sur l'ensemble de données et quelque chose sur la façon dont un ajustement est requis.

Autres conseils

Sauf qu'une spline ne vous donne pas de "formule", du moins pas à moins que vous ayez les moyens de gérer tous les segments par morceaux. Même alors, il ne sera pas facilement écrit, ni ne vous donnera tout ce qui est joli à regarder.

Une simple spline vous donne un interpolant. Pire, pour 3000 points, une spline interpolée vous donnera à peu près autant de segments cubes! Vous avez déjà dit l'interpolation. Bien sûr, un polynôme interpolant de cette commande élevée sera de toute façon complete Crapola, alors ne pensez pas que vous pouvez simplement y retourner.

Si tout ce dont vous avez besoin est un outil qui peut fournir une interpolation exacte à tout moment, et vous n'avez vraiment pas besoin d'avoir une formule explicite, alors une spline d'interpolation est un bon choix.

Ou voulez-vous vraiment un approximant? Une fonction qui s'adaptera approximativement à vos données, lissant un bruit? Le fait est que la plupart du temps, où les gens qui n'ont aucune idée de ce qu'ils font disent "interpolation", ils signifient vraiment l'approximation, le lissage. Ceci est possible bien sûr, mais il y a des livres entiers écrits sur le sujet de l'ajustement de la courbe, la modélisation des données empiriques. Votre premier objectif est alors de choisir un modèle intelligent, qui représentera ces données. Bien sûr, si vous avez un choix intelligent de modèle à partir de la compréhension physique de la relation à l'étude, vous pouvez alors estimer les paramètres de ce modèle en utilisant un schéma de régression non linéaire, dont beaucoup en trouvent.

Si vous n'avez pas de modèle et que vous ne pouvez pas en choisir un qui a à peu près la forme appropriée, vous vous retrouvez avec des modèles génériques sous forme de splines, qui peuvent être ajustés au sens de la régression, ou avec des modèles polynomiaux à haut ordre, pour lesquels J'ai peu de respect.

Mon point dans tout cela est que vous devez faire des choix et faire des recherches sur un choix de modèle.

La seule formule serait un polynôme de l'ordre 3000.

À quel point l'ajustement doit-il être bon? Quel type de formule attendez-vous?

Vous pouvez goûter vos points observés (au hasard est le meilleur) et ajuster une spline cubique à cet échantillon (si vous répétez cette procédure, vous pouvez créer une distribution de splines). L'ajustement d'une spline à 3 000 points est un peu trop, mais générer une distribution de spline basée sur un échantillon pourrait vous donner une idée de la fonction. Comme Josh l'a mentionné ci-dessus, http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html est un bon endroit pour commencer votre recherche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top