Gibt es eine Möglichkeit unbekannten Funktionswert zur Vorhersage auf der Grundlage seiner früheren Werten

StackOverflow https://stackoverflow.com/questions/1150862

  •  18-09-2019
  •  | 
  •  

Frage

Ich habe Werte von unbekannter Funktion wie zum Beispiel zurückgegeben

# this is an easy case - parabolic function
# but in my case function is realy unknown as it is connected to process execution time
[0, 1, 4, 9]

gibt es eine Möglichkeit nächsten Wert vorhersagen?

War es hilfreich?

Lösung

Siehe auch diese Frage .

Andere Tipps

Nicht unbedingt. Ihre „parabolische Funktion“ könnte wie folgt implementiert werden:

def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end

Sie können eine Vermutung nehmen, aber vorhersagen, mit Sicherheit ist unmöglich.

Sie können versuchen, mit neuronale Netze Ansatz. Es gibt ziemlich viele Artikel, die Sie von Google-Abfrage „neuronales Netz Funktionsapproximation“ finden können. Viele Bücher sind ebenfalls erhältlich, z.B. diese .

Wenn Sie nur Datenpunkte

Die Extrapolation der Daten außerhalb von bekannten Punkten sein kann geschätzt , aber Sie müssen die möglichen Unterschiede akzeptieren, sind viel größer als mit Interpolation von Daten zwischen bekannte Punkte. Streng genommen kann sowohl willkürlich ungenau sein, da die Funktion etwas verrückt zwischen den bekannten Punkten tun könnte, auch wenn es sich um eine gut erzogene stetige Funktion ist. Und wenn es nicht artig, sind alle Wetten schon ab ;-p

Es gibt eine Reihe von mathematischen Ansätzen dazu (die direkte Anwendung auf Informatik haben) - von einfachen linearen Algebra, um Dinge wie kubische Splines; und alles dazwischen.

Wenn Sie die Funktion

wollen

Getting esoterisch; Ein weiteres interessantes Modell hier ist die genetische Programmierung; durch einen Ausdruck über den bekannten Datenpunkten weiterentwickelt ist es möglich, eine geeignete Weise-Annäherung zu finden. Manchmal funktioniert es; manchmal ist es nicht. Nicht die Sprache, die Sie suchen, aber Jason Bock zeigt einige C # -Code, das dies tut in .NET 3.5, hier: Evolving LINQ Ausdrücke .

ich zufällig seinen Code haben, „zur Hand“ (Ich habe es in einigen Präsentationen verwendet werden); mit so etwas wie a => a * a wird es fast sofort zu finden, aber es soll (in der Theorie) in der Lage sein, praktisch jede Methode zu finden - aber ohne definierte maximale Lauflänge ;-p Es ist auch möglich, in eine Sackgasse zu bekommen (evolutionär gesprochen) wo man einfach nie wieder erholen ...

Ja. Vielleicht.

Wenn Sie einige Ein- und Ausgangswerte, also in Ihrem Fall [0,1,2,3] und [0,1,4,9], könnten Sie Antwortflächen (basicly Funktion Beschlag ich glaube) zu " erraten die eigentliche Funktion (in Ihrem Fall f (x) = x ^ 2). Wenn Sie lassen Sie Ihre erraten Funktion f (x) = c1 * x + c2 * x ^ 2 + C3 gibt es Algorithmen, die dieses c1 = 0, c2 = 1 und c3 = 0 gegeben, um Ihre Eingabe und Ausgabe und angesichts der resultierenden bestimmen, Funktion, die Sie den nächsten Wert vorhersagen können.

Hinweis

, dass die meisten anderen Antworten auf diese Frage auch gültig sind. Ich gehe davon aus, dass Sie nur eine Funktion, um Daten passen wollen. Mit anderen Worten, ich finde Ihre Frage recht vage, versuchen Sie bitte Ihre Fragen so vollständig wie möglich zu stellen!

In der Regel nein ... es sei denn, Sie wissen, es ist eine Funktion einer bestimmten Form (z Polynom gewissen Grad N) und es gibt genügend Informationen, um die Funktion zu beschränken.

z. für ein „normales“ Gegenbeispiel (siehe Chucks Antwort) dafür, warum man nicht unbedingt davon ausgehen, n ^ 2 w / o zu wissen, es ist eine quadratische Gleichung kann man f (n) = n 4 haben könnte - 6N 3 + 12N 2 - 6n, die für n = 0,1,2,3,4,5 f (n) = 0,1,4,9 besitzt , 40145.

Wenn Sie wissen, dass es eine besondere Form, gibt es einige Optionen ..., wenn das Formular eine lineare Addition von Basisfunktionen (zB f (x) = a + b cos (x) + c sqrt (x)), dann mit der kleinsten Quadrate können Sie die unbekannten Koeffizienten für die beste Lösung unter Verwendung dieser Basisfunktionen erhalten.

Sie können statistische Methoden anwenden, um zu versuchen und die nächste Antwort erraten, aber das ist vielleicht nicht sehr gut funktionieren, wenn die Funktion wie dieses (c):

int evil(void){
  static int e = 0;
  if(50 == e++){
    e = e * 100;
  }
  return e;
}

Diese Funktion schöne einfache Rückkehr Zahlen dann zu erhöhen ... BAM.

Das ist ein schwieriges Problem.

Sie sollten überprüfen Sie die Rekursion Gleichung für spezielle Fälle, in denen es so möglich sein könnte, eine Aufgabe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top