Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 211

 
Renat Fatkhullin:

1) Desgraciadamente, has formulado la pregunta de forma incompleta y has obtenido una respuesta escueta y educada de "no importa".

Querías una respuesta "tan acordada/convencional" formulándola en la propia pregunta. Pero Duncan se libró de "lo que es correcto" la primera vez y lo repitió la segunda.

2) No has obtenido confirmación de la precisión en R y no has obtenido respuesta a por qué el resultado es diferente en otros paquetes. La pregunta "por qué la respuesta es diferente en otros paquetes" es más importante y es capaz de revelar el tema.


3) Nuestra posición:

выражение для dgamma

(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)

for x ≥ 0, a > 0 and s > 0


в точке 0 является неопределенным.

R cree que se puede incluir este punto en el cálculo pero tomar los valores límite aunque sean infinitos como en el caso de dgamma(0,0.5,1).

Sin embargo, si se calculan las probabilidades dadas al infinito en el punto cero, todas las integrales de dgamma se convierten formalmente en infinitas y por esta lógica pgamma debería ser igual a infinito para todos los valores de x.

Sin embargo, esto contradice los resultados de pgamma, donde todos los valores resultan ser finitos. Son correctos, ya que si en el punto x=0 se supone que la densidad =0.

1) Sí, no recibí una respuesta detallada. Aunque lo resumí... No estoy imponiendo mi opinión, yo también estoy cansado de discutir, para ser honesto. Llamo la atención sobre el hecho de que las palabras de esta persona eran casi textuales a nuestro mensaje original. La forma de determinar la densidad en el punto extremo no es importante, lo principal es calcular correctamente las integrales:

Declaramos que, estrictamente hablando, la densidad de la distribución gamma en el punto cero es indefinida. Y tomando el límite de la derecha, la densidad es igual a uno.

A la luz de esto, creemos que la afirmación "errores de cálculo en R" no es correcta. Más concretamente, se trata de una cuestión de convención: lo que debe considerarse igual a la expresión cero a la potencia de cero. Igualar la densidad de la distribución gamma a cero en el punto cero no parece ser ninguna práctica condicional.

2) Ni siquiera se habló de precisión por mi parte. La densidad en el punto cero no tiene que ver con la precisión, sino con la forma en que se deriva como resultado de la función: la no convergencia (NaN) o la equiparación con el límite o con el cero. El punto principal es que no importa para calcular la integral.

3) He releído el texto corregido del artículo. Y me alegro de que hayas decidido no considerar el comportamiento de dgamma como un error.

Pero este :

todas las integrales de dgamma se vuelven formalmente infinitas y por esta lógica pgamma debería ser igual a infinito para todos los valores de x.

Extraño, Renat.

pgamma en principio no puede ser infinito, ya que el ingegral está limitado desde arriba por un valor de 1.

Tomemos la distribución normal. Se define en [-inf,+inf]. Integral de la función de distribución = 1 en todo este intervalo. Pero de alguna manera resulta que la sumatoria (integración) de la densidad en saportes infinitamente grandes no resulta en una suma infinita. Aunque la densidad en todo el soporte de mantenimiento != 0 en cualquier región.

Y para dgmamma el punto x ==0 con su densidad == inf (y por cierto, no has considerado el caso en que la densidad tiende a 1 en este punto y qué conclusiones sobre la integración sacas de esto...) ¿con qué frecuencia se produce? Yo diría que no. La probabilidad de realizar una variable aleatoria en cualquier punto == 0 en cualquier distribución continua... Todos los estadísticos lo saben. La densidad se considera una aproximación de la probabilidad a una región infinitesimal alrededor de x.

De este hecho se desprende que, por muy grande que sea la densidad en el punto extremo, su efecto sobre el ingral total = 0. Piensa en ello...

Creo que lo estás pensando demasiado. ) Pero no voy a discutir y resolverlo. Tal vez algún día me dé cuenta y responda yo mismo en lugar de Duncan. )

Gracias.

 

R es un sistema increíble que personalmente me ha abierto los ojos sobre lo lejos que estábamos en MetaTrader/MQL de las necesidades reales de "hacer cálculos complejos de forma sencilla y en el momento".

Nosotros (los desarrolladores de C++) llevamos en la sangre el enfoque de "puedes hacerlo todo tú y nosotros te damos la base de bajo nivel y la velocidad de cálculo". Somos fanáticos del rendimiento y somos buenos en ello - MQL5 es genial en 64 bits.

Cuando empecé a trabajar en R me di cuenta de que necesitaba tantas funciones potentes en una línea como fuera posible y poder investigar en general.

Así que hemos dado un giro brusco y hemos empezado a actualizar MetaTrader 5:

  • incluir las bibliotecas matemáticas Alglib y Fuzzy, previamente reescritas, en la entrega estándar, cubiertas con pruebas unitarias
  • desarrolló un análogo de las funciones estadísticas de R, realizó pruebas y las cubrió con tests. el trabajo sigue en curso y la biblioteca se está ampliando
  • desarrolló la primera versión beta de la biblioteca Graphics como un análogo de plot en R. añadió funciones de una sola línea para una salida rápida
  • ha empezado a cambiar las interfaces en las ventanas de salida del terminal para permitir el manejo de datos tabulares, ha cambiado la dirección de la salida, ha añadido la desactivación de las columnas innecesarias, ha cambiado la fuente a monoespacio en la ventana de salida del Asesor Experto
  • se ha añadido una potente función ArrayPrint para la impresión automática de matrices, incluidas las estructuras.
  • se han añadido las funciones FileLoad y FileSave para guardar/leer rápidamente las matrices en un disco.


Por supuesto, estamos al principio del camino, pero el vector de esfuerzo adecuado ya está claro.

 

7 pasos en la integración no es ciertamente suficiente. Aquí hay 1.000:

> pgamma(0.8, 0.5, 1)
[1] 0.7940968

#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
 
Alexey Burnakov:

1) Sí, no recibí una respuesta detallada. Aunque lo estaba resumiendo... No estoy imponiendo mi opinión, yo también estoy cansado de discutir, para ser honesto. Llamo la atención sobre el hecho de que las palabras de esta persona eran casi textuales a nuestro mensaje original.

Fue una respuesta educada, sin detalles ni verificación. Y la respuesta no coincidía con Wolfram Alpha y Matlab, lo cual es un problema.

No hay necesidad de evadir, la cuestión de fondo se ha planteado claramente.

 
Dr. Trader:


#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.

Integrar la función 1/x, de 0 a 1, incluyendo los puntos límite y comparar con el resultado de los cálculos analíticos.

Wolfram dice que la integral no convergerá debido a la singularidad en x=0.

 
Quantum:

Integrar la función 1/x, de 0 a 1, incluyendo los puntos límite y comparar con el resultado de los cálculos analíticos.

Con el mismo código - 7.485471. R llegó a 76,3342 y dijo que no iría más allá, y que no es un resultado exacto, e incorrecto. Wolfram dijo inmediatamente que el resultado no cuadra, y no respondió nada.
La respuesta correcta no la sé, ¿cuánto?

No me digas que como no se puede encontrar la integral de 1/x, tampoco se puede encontrar la integral de dgamma(x). Las dos funciones tienden al infinito en x -> 0+ , pero tienden a velocidades diferentes, y esa velocidad influye en que se pueda encontrar la integral o no.

 

Existe una función -log(x). Tiende a infinito en x->0. Se puede hacer sin menos, entonces tiende hacia abajo, no estoy cómodo con eso.

Y tiene una integral de 0 a 1. El infinito no interfiere.


 
Renat Fatkhullin:

R es un sistema asombroso que personalmente me abrió los ojos sobre lo lejos que estábamos en MetaTrader/MQL de la necesidad real de "hacer cálculos complejos de manera simple y directa ahora".

...

Así que dimos un giro brusco y empezamos a actualizar MetaTrader 5:

  • incluyó las bibliotecas matemáticas Alglib y Fuzzy, previamente reescritas, como estándar, y cubrió las pruebas unitarias
  • desarrolló un análogo de las funciones estadísticas de R, realizó pruebas y las cubrió con tests. el trabajo sigue en curso y la biblioteca se está ampliando
  • desarrolló la primera versión beta de la biblioteca Graphics como un análogo de plot en R. añadió funciones de una sola línea para una salida rápida
  • comenzó a cambiar las interfaces en las ventanas de salida del terminal para poder operar con datos tabulares. cambió la dirección de la salida, añadió la desactivación de columnas innecesarias, reemplazó la fuente por una monoespaciada en la ventana de salida de EA
  • se ha añadido una potente función ArrayPrint para la impresión automática de matrices, incluidas las estructuras.
  • se han añadido las funciones FileLoad y FileSave para la carga/descarga rápida de matrices en disco.


Por supuesto, estamos al principio del viaje, pero el vector de esfuerzo adecuado ya está claro.

R, al igual que muchos otros lenguajes de programación, es mucho más conveniente para el aprendizaje automático en comparación con MQL, ya que tiene un conjunto de características incorporadas para el procesamiento de datos de matriz. La cuestión es que una muestra para el aprendizaje automático suele ser una matriz de datos bidimensional, por lo que necesita un funcional para trabajar con matrices:

  1. Inserción de filas y columnas como matrices de menor dimensión en otra matriz
  2. Sustitución de filas y columnas en una matriz como matrices de menor tamaño
  3. Eliminación de filas y columnas de una matriz (por ejemplo, para eliminar predictores sin importancia o ejemplos con "valores atípicos" evidentes de una selección)
  4. Dividir matrices en partes, lo que da lugar a dos o más matrices que son partes de la matriz original (necesario para dividir una muestra en partes de entrenamiento y de prueba, o en más partes, por ejemplo para Walling Forward).
  5. Mezcla aleatoria de filas y columnas en una matriz con una distribución equitativa (es necesario que esos u otros ejemplos de la muestra entren en diferentes partes, preferiblemente distribuidos de forma equitativa en estas partes).
  6. Varias funciones para el procesamiento de datos por fila o columna (por ejemplo, el cálculo de la media aritmética por fila o por columna, la varianza o la búsqueda del valor máximo o mínimo en una fila para su posterior normalización).
  7. Y así sucesivamente.

Hasta que MQL no haya implementado la mencionada funcionalidad necesaria para el manejo de muestras en arrays, la mayoría de los desarrolladores de algoritmos de aprendizaje automático preferirán otros lenguajes de programación que ya tienen todo esto disponible. O utilizarán el MLP sin pretensiones (algoritmo de los años 60) de la biblioteca AlgLib donde, si no recuerdo mal, por comodidad las matrices bidimensionales se representan como unidimensionales.

Por supuesto, las funciones para las densidades de las distribuciones aleatorias son también una funcionalidad necesaria. Pero estas funciones no siempre son necesarias en las tareas de aprendizaje automático, y en algunas tareas no se utilizan en absoluto. Pero las operaciones con muestras, al igual que con las matrices multidimensionales, es algo de lo que no puede prescindir la implementación de los algoritmos de aprendizaje automático para cualquier tarea, a menos que, por supuesto, se trate de una tarea de entrenamiento de una malla para aprender los datos normalizados conocidos a partir de CWR triviales.

 
Renat Fatkhullin:

R es un sistema asombroso, que personalmente me abrió los ojos sobre lo lejos que estábamos en MetaTrader/MQL de las necesidades reales de "hacer cálculos complejos de forma sencilla y en el momento".

Nosotros (los desarrolladores de C++) llevamos en la sangre el enfoque de "puedes hacerlo todo tú y nosotros te damos la base de bajo nivel y la velocidad de cálculo". Somos fanáticos del rendimiento y somos buenos en ello - MQL5 es genial en 64 bits.

Cuando empecé a trabajar en R me di cuenta de que necesitaba tantas funciones potentes en una línea como fuera posible y poder investigar en general.

Así que hemos dado un giro brusco y hemos empezado a actualizar MetaTrader 5:

  • incluir las bibliotecas matemáticas Alglib y Fuzzy, previamente reescritas, en la entrega estándar, cubiertas con pruebas unitarias
  • desarrolló un análogo de las funciones estadísticas de R, realizó pruebas y las cubrió con tests. el trabajo sigue en curso y la biblioteca se está ampliando
  • desarrolló la primera versión beta de la biblioteca Graphics como un análogo de plot en R. añadió funciones de una sola línea para una salida rápida
  • Hemos empezado a cambiar las interfaces de las ventanas de salida del terminal para poder operar con datos tabulares. Hemos cambiado la dirección de la salida, hemos añadido la desactivación de columnas innecesarias, hemos cambiado el tipo de letra a monoespacio en la ventana de salida del Asesor Experto
  • se ha añadido una potente función ArrayPrint para la impresión automática de matrices, incluidas las estructuras.
  • se ha añadido FileLoad y FileSave para escribir/leer rápidamente matrices en el disco.


Por supuesto, estamos al principio del camino, pero el vector correcto de los esfuerzos ya está claro.

Se trata de una evaluación equilibrada y sorprendentemente objetiva de R.

La parte constructiva del debate no tiene desperdicio. Escuchas los comentarios y sugerencias de los usuarios de R. Nosotros también estamos interesados en mejorar la plataforma.

Por supuesto que está al principio, pero en cualquier caso las vacunas R fortalecerán la ACM.

Buena suerte en su duro trabajo.

 

En cuanto a las convenciones de las que hablaba Burnakov.

Consideremos tres casos muy diferentes.

1. División por una constante igual a cero.

En R tenemos el resultado

> 1/0
[1] Inf

¿Es un resultado correcto?

Para el intérprete, este resultado debe considerarse correcto, porque no podemos terminar R

Para el compilador, este resultado es correcto. Cuando se produce una situación excepcional, se interrumpe la ejecución del programa y se le da el control para manejar esta situación excepcional, de lo contrario se bloqueará.

¡Fíjate en lo diferente que es!

2. División por una variable, igual a cero.

> a<-0
> 1/a
[1] Inf

En sentido estricto, esta variante difiere de la anterior.

La función 1/a es continua en todas partes excepto en a=0. En este punto el límite a la izquierda = -Inf, y el límite a la derecha = +Inf.

R no entiende esto, pero puede aceptarlo ya que la diferencia entre menos infinito y más infinito tiene sentido en las matemáticas, no en el código del programa


3. División de dos cantidades infinitesimales en su aspiración a cero

> sin(a)/a
[1] NaN

El significado de NaN no tiene ninguna explicación para mí. Pero está bastante claro, dado el punto 2, que R no entiende los límites como tales.

¿Son estos errores de R como sistema de programación? No lo sé. Lo más probable es que la documentación de R debería haber informado sobre tales matices, pero entonces, ¿cómo implementarlo con un desarrollo descentralizado de momento de unas 130.000 funciones? ¿Es necesario?

¿Qué se desprende de esto en el sentido de la discusión que surgió?

Las decisiones se toman en tierra.

1. Tomamos R y transferimos el código a MKL. Al mismo tiempo, tenemos que darnos cuenta de que las variantes mencionadas pueden tener diferentes interpretaciones en diferentes funciones de R

2. Declarar los acuerdos, que los valores serán aceptados en los casos que he mencionado (la lista puede ser incompleta). Comprobamos a fondo el código de R y, si no coincide con nuestra configuración, lo portamos de R a MCL con correcciones según nuestros acuerdos. En este caso, debido al desarrollo centralizado, aplicamos sistemáticamente las convenciones adoptadas y, en este sentido, tenemos un sistema mejor.

Razón de la queja: