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

 
Yuri, he podido entrenar un modelo vmr, pero no puedo predecir nuevos datos en él, ¿puedes decirme qué pasa? Selecciono el menú Cargar modelo, selecciono el archivo train.vmr del atachment, y luego hago clic en Usar modelo. Veo el texto "Introduzca los datos y pulse "OK" en el registro. Pero eso es todo, no importa los datos que introduzca, sigo viendo un botón gris inactivo de Ok y no puedo obtener una respuesta. Los archivos train.csv y test.csv también están en atache, son los que publicaste antes.
Archivos adjuntos:
train.zip  38 kb
 
Dr.Trader:
Yuri, he podido entrenar un modelo vmr, pero no puedo predecir nuevos datos en él, ¿puedes decirme qué ocurre? Selecciono el menú Cargar modelo, selecciono el archivo train.vmr del atachment, y luego hago clic en Usar modelo. Veo el texto "Introduzca los datos y pulse "OK" en el registro. Pero eso es todo, no importa los datos que introduzca, sigo viendo un botón gris inactivo de Ok y no puedo obtener una respuesta. Los archivos train.csv y test.csv también están en atache, son los que publicaste antes.

¿Debe haber introducido algo no numérico? Esto desencadena un manejador de excepciones y desactiva el botón OK. En ese caso es necesario reiniciar jPrediction.

En un futuro próximo estudiaré esta cuestión para, al menos, dar algún tipo de mensaje de advertencia cuando un usuario haya introducido datos no numéricos.

P/S Ya lo he arreglado.

Por ejemplo, introduzcamos el símbolo "z" en lugar del número. Esto dará lugar a un mensaje de error:

Para activar el botón OK ahora, seleccione la opción de menú Archivo>Usar modelo:


He subido la versión corregida a mi sitio web

 

Lo he descubierto, el error estaba en el formato de datos equivocado. Formateé los datos como lo hiciste en el pdf - añadí una segunda línea con una explicación, la primera columna con índices, y eliminé el nombre de la columna del predictor. Todo funciona. El modelo se entrena en ambos casos, tanto en los datos originales como en los formateados. Pero la predicción sólo funciona si se introducen datos con un formato especial para el entrenamiento.

Pero lamentablemente su modelo no pasó la prueba con sus propios datos. Anteriormente publicaste los archivos train.csv y test.csv y tuviste un buen rendimiento de predicción. Lo he comprobado, el error de predicción es del 50%, no es un buen rendimiento en absoluto.

Pasos para la prueba:

1) Formatee el archivo train.csv como se indica más arriba. A continuación, divida físicamente el archivo en dos: train_part1.csv y train_part2.csv. El segundo archivo contiene las últimas 20 líneas de train.csv. El primer archivo contiene todo lo demás, excepto las últimas 20 líneas, por lo que los datos de los dos archivos no se solapan.

2) Entrenar el modelo en train_part1.csv, entrar en el modo de previsión. Alimente alternativamente las líneas de train_part2.csv para la predicción. Sólo he acertado 9 de 20 veces, no es un milagro.

No entiendo por qué si su modelo mismo divide el archivo de entrenamiento original en dos partes para el entrenamiento y la validación, luego hace una prueba fuera de muestra, y termina con una precisión de predicción de 100? ¿Y si divides físicamente el archivo de entrenamiento, y haces la prueba fuera de muestra manualmente, entonces la predicción no es mejor que lanzar una moneda? Si introduzco cualquier muestra de la muestra de entrenamiento para la predicción, ésta funciona correctamente, es decir, la función de predicción parece estar bien. Todo esto es muy malo y erróneo, tienes algunos errores graves en tu código.

Archivos adjuntos:
vmr_test.zip  44 kb
 
SanSanych Fomenko:

Sólo una familiaridad muy superficial con R permitiría hablar de "regañinas".

Por supuesto, ponemos R y vemos un intérprete de cadenas de caracteres. Si se profundiza, se puede ver el bytecode, pero no resuelve ninguno de los problemas del intérprete en términos de eficiencia. Ni siquiera hay nada que discutir - regaña.

Pero si se profundiza un poco en los paquetes de R, se ve rápidamente que lo que se ve en el código de R se refiere a otro código. Y si te pones a investigar, verás que para los algoritmos computacionalmente intensivos R siempre utiliza paquetes de terceros, que fueron elegidos por el principio de máxima eficiencia. Suelen ser bibliotecas C o Fortran.

O, por ejemplo, las operaciones matriciales. Teniendo en cuenta que R no tiene noción de escalar y que todo comienza con vectores y que la aritmética matricial es completamente natural para R, la cuestión de utilizar una biblioteca apropiada que NO esté escrita en R es una cuestión de principios. Se utiliza la librería Intel Math Kernel.

Además, la paralización de los cálculos no sólo en todos los núcleos del propio ordenador, sino también en los ordenadores vecinos, es una operación habitual en R.

Por lo tanto, lo que es "regañar" y lo que no es una gran pregunta.

PS.

No tienes que portar nada a R, sólo tienes que aprender las matemáticas. R tiene todo lo que necesitas y mucho más.

Estoy de acuerdo con SanSanych. Todo lo que necesitas para cualquiera de tus ideas ya está en R/.

El arrogante comentario de Reshetov no es sorprendente. Es una visión del mundo así.

No hay necesidad de cambiar de opinión. No tiene sentido.

 
Dr.Trader:

No entiendo por qué si su modelo mismo divide el archivo de entrenamiento original en dos partes para el entrenamiento y la validación, luego hace una prueba fuera de muestra, y termina con una precisión de predicción de 100? ¿Y si divides físicamente el archivo de entrenamiento, y haces la prueba fuera de muestra manualmente, entonces la predicción no es mejor que lanzar una moneda? Si introduzco cualquier muestra de la muestra de entrenamiento para la predicción, ésta funciona correctamente, es decir, la función de predicción parece estar bien. Todo esto es muy malo y erróneo, tienes algunos errores graves en tu código.

Tienes razón, hay un error en el código. Lo corregiré.
 
Vladimir Perervenko:

Apoyo a SanSanych. Todo lo que necesitas para cualquiera de tus ideas ya está en la R/.

Voy a discutir aquí, si se me permite, nag se entiende en términos de velocidad y estoy absolutamente de acuerdo con Yuri...

Puedes encontrar una solución lista para R para casi cualquier problema, pero a veces estás atascado con la velocidad

Recuerdo, que estaba haciendo una búsqueda muy dura de muchos parámetros a través de la función de correlación, al principio utilicé la función incorporada en R (por cierto, está escrita en C++), pero debido a que estaba sobrecargada con diferentes métodos, el cálculo de una ronda de mi ciclo tomó alrededor de 3,9 minutos o 230 segundos, ese tiempo no era aceptable, el segundo paso fue escribir mi propia función en R sin todo lo demás, mi función funcionó con 30 segundos, pero no me satisfacía, porque R era mi primer y único lenguaje, le pedí a mi amigo que escribiera para mí una función corr así que vamos a comparar

La función de correlación por defecto en R es de 230 segundos.

función de correlación auto-escrita en R - 30 seg.

función escrita en C++ - 0,33 seg.

Así que sí Yuri tiene razón, R es una jeta en un contexto en el que se refería, pero este problema se puede resolver, y en cuanto a la comodidad y la velocidad de escritura de código, creo que R está muy lejos de todos los lenguajes ya que no tengo que escribir nada, todo está hecho, por eso me gusta R ...

 
mytarmailS:

Voy a argumentar aquí, si se me permite, que el regaño se entiende en términos de velocidad y estoy absolutamente de acuerdo con Yuri...

Es probable que encuentres una solución preparada para casi cualquier problema, pero a veces te quedas con la velocidad.

Recuerdo, que estaba haciendo una búsqueda muy dura de muchos parámetros a través de la función de correlación, al principio utilicé la función incorporada en R (por cierto, está escrita en C++), pero debido a que estaba sobrecargada con diferentes métodos, el cálculo de una ronda de mi ciclo tomó alrededor de 3,9 minutos o 230 segundos, ese tiempo no era aceptable, el segundo paso fue escribir mi propia función en R sin todo lo demás, mi función funcionó con 30 segundos, pero no me satisfacía, porque R era mi primer y único lenguaje, le pedí a mi amigo que escribiera para mí una función corr así que vamos a comparar

La función de correlación por defecto en R es de 230 segundos.

función de correlación auto-escrita en R - 30 seg.

función escrita en C++ - 0,33 seg.

Así que sí Yuri tiene razón, R es un fastidio en un contexto en el que lo quiere decir, pero este problema está resuelto, y en cuanto a la comodidad y la velocidad de codificación, creo que R está muy lejos de todos los lenguajes ya que casi no tengo que escribir nada, todo está hecho, por eso me gusta R ...

¿Y qué tiene que ver esto con R?

Una vez más, R tiene todo lo que necesitas para poner en práctica tus ideas, incluida la velocidad.

Otra cosa es que no todo el mundo y no todo sabe utilizarlos.

Pero esto no es un problema de la lengua.

Por cierto, la comodidad y simplicidad de las funciones inline en Srr es increíble.

Buena suerte

 
mytarmailS:

Voy a argumentar aquí, si se me permite, que el regaño se entiende en términos de velocidad y estoy absolutamente de acuerdo con Yuri...

Es probable que encuentres una solución preparada para casi cualquier problema para R, pero a veces te quedas con la velocidad.

Recuerdo, que estaba haciendo una búsqueda muy dura de muchos parámetros a través de la función de correlación, al principio utilicé la función incorporada en R (por cierto, está escrita en C++), pero debido a que estaba sobrecargada con diferentes métodos, el cálculo de una ronda de mi ciclo tomó alrededor de 3,9 minutos o 230 segundos, ese tiempo no era aceptable, el segundo paso fue escribir mi propia función en R sin todo lo demás, mi función funcionó con 30 segundos, pero no me satisfacía, porque R era mi primer y único lenguaje, le pedí a mi amigo que escribiera para mí una función corr así que vamos a comparar

La función de correlación por defecto en R es de 230 segundos.

función de correlación auto-escrita en R - 30 seg.

función escrita en C++ - 0,33 seg.

Así que sí Yuri tiene razón, R es una jeta en un contexto al que se refiere, pero este problema está resuelto, y en cuanto a la comodidad y la velocidad de codificación, creo que R está muy lejos de todos los lenguajes ya que casi no tengo que escribir nada, todo está hecho, por eso me gusta R ...

No sustituyamos las preguntas generales por un ejemplo particular.

Si hablamos en general de la eficiencia del código en el SISTEMA de programación R, escribí sobre los fundamentos de la eficiencia. A diferencia de la mayoría de los sistemas de programación, los algoritmos computacionalmente intensivos en R se utilizan de forma indirecta y se emplean como máximo en la programación en general, dentro de algunas funciones de contenido, aunque existe la posibilidad de utilizarlos directamente, por ejemplo, la optimización o el AG.

El ejemplo más claro de esta eficiencia son las operaciones matriciales, que pertenecen a las operaciones de mayor capacidad computacional. Un programador puede no ser consciente en absoluto de la biblioteca que se utiliza porque una operación matricial es una simple línea de código.

Además, de lo que no escribí en mi post sobre la eficiencia es de lo que tú escribiste. Es la capacidad de escribir una pieza de código snr, con el énfasis de que la estructura de R es tal que esta inserción será una adición orgánica al código principal. Y el ejemplo que has puesto es muy típico de R.

 
OK, sugiero cerrar el tema de la eficiencia R, porque ya estamos empezando a repetir lo obvio, y el significado es "aceite, el cielo es azul, la hierba es verde".
 

¡Hola!

Encontré un paquete con redes neuronales recurrentes https://cran.r-project.org/web/packages/rnn/rnn.pdf, fue interesante comprobarlo con mis datos (quizás a alguien más le interese ;) ) Pero me encontré con algo a lo que nunca me había enfrentado, ya que la red recurrente, los datos se alimentan de una manera especial en forma de matriz 3D, a pesar de que hay un ejemplo, todavía no puedo entender cómo funciona

cómo debería ser el código en la variable "X" si no tengo 2 predictores sino 100, aquí está un trozo del ejemplo:

#  create training numbers
X1 = sample(0:127, 7000, replace=TRUE)
X2 = sample(0:127, 7000, replace=TRUE)
#  create training response numbers
Y <- X1 + X2
#  convert to binary
X1 <- int2bin(X1)
X2 <- int2bin(X2)
Y <- int2bin(Y)
#  Create 3 d array: dim 1: samples; dim 2: time; dim 3: variables.
X <- array( c(X1,X2), dim=c(dim(X1),2) )