¿Hay una manera de predecir el valor de función desconocida en base a sus valores anteriores

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Tengo valores devueltos por función desconocida como por ejemplo

# 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]

¿hay alguna manera de predecir siguiente valor?

¿Fue útil?

Solución

Ver también esta pregunta .

Otros consejos

No necesariamente. Su "función parabólica" podría implementarse como esto:

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

Puede tomar una conjetura, pero predecir con certeza es imposible.

Puede intentar usar enfoque de redes neuronales . Hay bastante muchos artículos se pueden encontrar mediante consulta Google "red neuronal función de aproximación". Muchos libros también están disponibles, por ejemplo, éste .

Si sólo desea los puntos de datos

La extrapolación de los datos fuera de puntos conocidos puede ser estimó , pero hay que aceptar las diferencias de potencial son mucho mayores que con la interpolación de los datos entre puntos conocidos. En sentido estricto, ambos pueden ser arbitrariamente inexacto, ya que la función podía hacer nada loco entre los puntos conocidos, incluso si se trata de una función continua de buen comportamiento. Y si no buen comportamiento, ya que todas las apuestas están apagadas -P

Hay una serie de enfoques matemáticos a esto (que tienen una aplicación directa a la informática) - cualquier cosa desde una simple álgebra lineal a cosas como splines cúbicos; y todo lo demás.

Si desea que la función

Cómo esotérica; otro modelo interesante aquí es la programación genética; por la evolución de una expresión en los puntos de datos conocidos que es posible encontrar una aproximación adecuada de cerca. A veces funciona; a veces no lo hace. No es el idioma que estás buscando, pero Jason Bock muestra algo de código C # que hace de .NET 3.5, aquí: Evolucionando LINQ Expresiones .

Me sucede que tiene su código "a mano" (Lo he utilizado en algunas presentaciones); con algo como a => a * a le resultará casi al instante, pero debe (en teoría) ser capaz de encontrar prácticamente cualquier método - pero sin ninguna longitud de recorrido máxima definida ;-P También es posible entrar en un callejón sin salida (evolutiva hablando) en el que simplemente nunca se recuperan ...

Utilice la Wolfram Alpha API :)

Sí. Tal vez.

Si usted tiene algunos valores de entrada y de salida, es decir, en su caso [0,1,2,3] y [0,1,4,9], podría utilizar superficies de respuesta (básicamente apropiado función i creen) a ' adivinar la función real (en su caso f (x) = x ^ 2). Si deja que su función adivinando ser f (x) = C1 * x + c2 * x ^ 2 + C3 existen algoritmos que determinan que c1 = 0, c2 = 1 y c3 = 0 dada su entrada y salida y, dado el resultante función que se puede predecir el siguiente valor.

Tenga en cuenta que la mayoría de las otras respuestas a esta pregunta son válidas también. Estoy asumiendo que usted desea encajar alguna función a los datos. En otras palabras, creo que su pregunta bastante vago, por favor intente plantear sus preguntas lo más completo posible!

En general, no ... a menos que sepa que es una función de una forma particular (por ejemplo polinómica de un cierto grado N) y hay suficiente información para limitar la función.

por ejemplo. para un contraejemplo más "ordinario" (véase la respuesta de Chuck) de por qué usted no necesariamente puede suponer n ^ 2 W / O sabiendo que es una ecuación de segundo grado, que podría tener f (n) = n 4 - 6n 3 + 12n 2 - 6n, que tiene para n = 0,1,2,3,4,5 f (n) = 0,1,4,9 , 40.145.

Si usted sabe que es una forma particular, hay algunas opciones ... si la forma es una adición lineal de funciones de base (por ejemplo, f (x) = a + b cos (x) + c sqrt (x)) a continuación, utilizando los mínimos cuadrados se puede obtener los coeficientes desconocidos para la mejor ajuste usando las funciones de base.

Puede aplicar métodos estadísticos para tratar de adivinar la siguiente respuesta, pero que podría no funcionar muy bien si la función es como este (c):

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

Esta función devolverá buen número creciente sencilla entonces ... BAM.

Esto es un problema difícil.

Usted debe verificar la relación recurrencia ecuación para casos especiales en los que podría ser posible tal una tarea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top