Hochrechnung von Daten mit numpy/python
Sagen wir, ich habe einen einfachen Datensatz. Vielleicht in dictionary form, würde es so Aussehen:
{1:5, 2:10, 3:15, 4:20, 5:25}
(die Reihenfolge ist immer aufsteigend).
Was ich tun will ist logischerweise, herauszufinden, was der nächste Punkt der Daten am wahrscheinlichsten ist. In dem Fall, zum Beispiel, wäre es {6: 30}
was wäre der beste Weg, dies zu tun?
- möglich, Duplikat der Wie man scipy.interpolieren Sie geben eine extrapolierte Ergebnis über die Eingangs-Bereich?
- Wörterbücher sind ungeordnete Sammlungen, so dass Sie Ihre "Bestellung ist immer aufsteigend" Bemerkung sei eine gefährliche Annahme, da
for key in d
iteriert über die Tasten jedoch Python sieht, passen nicht in das bestellte Sie erstellt wurden. - Ich meinte eher in Bezug auf die Daten, wie in jedem numerisch höher Schlüssel einen numerisch höheren Wert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der Diskussion mit Ihnen in der Python-chat, und passen Ihre Daten an eine exponentielle. Dies sollte ein relativ guter Indikator, da Sie nicht auf der Suche für die langfristige extrapolation.
Den roten Punkt in der ganz rechten Achse zeigt die nächste "vorhergesagt" Punkt.
Können Sie auch verwenden, numpy ist polyfit:
Diese können Sie ändern, den Grad des Polynom-fit sehr leicht als Funktion
polyfit
nehmen Sie die folgenden Argumentenp.polyfit(x data, y data, degree)
. Gezeigt ist ein linearer fit, wo das zurückgegebene array sieht aus wiefit[0]*x^n + fit[1]*x^(n-1) + ... + fit[n-1]*x^0
für jeden Gradn
. Diepoly1d
Funktion können Sie diese array in einer Funktion liefert den Wert des Polynoms zu einem gegebenen Wertx
.Im Allgemeinen eine extrapolation ohne ein gut verstandenes Modell wird in sporadischen Ergebnisse am besten.
Exponentielle curve fitting.
y = fit[0] * x + fit[1]
.Wie bereits von dieser Antwort auf eine Verwandte Frage, wie der version 0.17.0 von scipy, es gibt eine option in scipy.interpolieren.interp1d ermöglicht lineare extrapolation. In Ihrem Fall könnten Sie tun:
Da Ihre Daten nicht etwa linear, die Sie tun können eine lineare regression, und verwenden Sie dann die Ergebnisse aus, die regression zur Berechnung der nächsten Stelle, wobei
y = w[0]*x + w[1]
(mit der notation aus dem verlinkten Beispiel für y = mx + b).Wenn Ihre Daten nicht etwa linear, und Sie nicht haben, einige andere theoretische form für eine regression, die dann allgemein extrapolationen (mit sagen, Polynome oder splines) sind viel weniger zuverlässig sein, wie Sie können ein bisschen verrückt über die bekannten Datenpunkten. Zum Beispiel, sehen Sie die akzeptierte Antwort hier.
Mit
scipy.interpolieren.splrep
:Sehen Wie man scipy.interpolieren Sie geben eine extrapolierte Ergebnis über den Eingangsbereich?