extrapolant les données avec numpy/python
Disons que j'ai un ensemble de données simples. Peut-être en forme de dictionnaire, il devrait ressembler à ceci:
{1:5, 2:10, 3:15, 4:20, 5:25}
(l'ordre est toujours ascendant).
Ce que je veux faire est logiquement comprendre ce que la prochaine point de données est le plus susceptible de l'être. Dans le cas, par exemple, il serait {6: 30}
quelle serait la meilleure façon de le faire?
double possible de Comment faire de scipy.interpoler donner une extrapolation de résultats au-delà de la plage d'entrée?
Les dictionnaires sont des collections non triées, de sorte que votre "commande est toujours croissant" remarque peut être dangereux hypothèse, depuis
Je voulais dire plus en termes de données, comme dans chaque numériquement plus élevé clé a une valeur numérique plus élevée
Les dictionnaires sont des collections non triées, de sorte que votre "commande est toujours croissant" remarque peut être dangereux hypothèse, depuis
for key in d
va itérer sur les touches toutefois Python entend, pas dans la commande que vous avez créé.Je voulais dire plus en termes de données, comme dans chaque numériquement plus élevé clé a une valeur numérique plus élevée
OriginalL'auteur corvid | 2013-10-16
Vous devez vous connecter pour publier un commentaire.
Après avoir discuté avec vous dans le Python de chat, et le montage de vos données à une exponentielle. Cela devrait donner un relativement bon indicateur puisque vous n'êtes pas à la recherche pour le long terme d'une extrapolation.
Le point rouge à l'extrême droite de l'axe indique la prochaine "prédit" le point.
OriginalL'auteur OldTinfoil
Vous pouvez également utiliser numpy est polyfit:
Cela vous permet de modifier le degré du polynôme d'ajustement assez facilement que la fonction
polyfit
prendre ces arguments suivantsnp.polyfit(x data, y data, degree)
. Montré ici est un ajustement linéaire où le tableau retourné ressemblefit[0]*x^n + fit[1]*x^(n-1) + ... + fit[n-1]*x^0
pour n'importe quel degrén
. Lepoly1d
fonction vous permet de transformer ce tableau en une fonction qui renvoie la valeur du polynôme à une valeur dex
.En général extrapolation sans bien compris modèle aura des résultats sporadiques au mieux.
Exponentielle ajustement de la courbe.
C'est un modèle linéaire. Comme Ophion commentaire mentionne, c'est
y = fit[0] * x + fit[1]
.y aurait-il un moyen d'impliquer un modèle qui suit un plus exponentielle chemin?
Vous pouvez toujours ajustement exponentiel à cela; cependant, montage exponentiel est intrinsèquement plus difficile. Veuillez fournir un exemple complet de ce que vous essayez de faire.
OriginalL'auteur Daniel
Comme l'a souligné ce réponse à une question connexe, à partir de la version 0.17.0 de scipy, il y a une option dans scipy.interpoler.interp1d qui permet une extrapolation linéaire. Dans votre cas, vous pourriez faire:
OriginalL'auteur Noyer282
Vos données est approximativement linéaire, vous pouvez faire une la régression linéaire, et ensuite utiliser les résultats de cette régression pour calculer le point suivant, à l'aide de
y = w[0]*x + w[1]
(en conservant la notation de la lié exemple pour y = mx + b).Si vos données n'est pas à peu près linéaire et vous n'avez pas un autre forme théorique pour une régression, alors général des extrapolations (à l'aide de dire des polynômes ou des splines) sont beaucoup moins fiables qu'ils peuvent aller un peu fou, au-delà des points de données connus. Voir, par exemple, de la accepté de répondre à ici.
OriginalL'auteur tom10
À l'aide de
scipy.interpoler.splrep
:Voir Comment faire de scipy.interpoler donner une extrapolation de résultats au-delà de l'entrée de gamme?
OriginalL'auteur falsetru