Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2032
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En el caso de un bosque, existe la opción de mirar la importancia y los clusters. En catbust es probablemente plot_tree.
Prepararé los datos y los publicaré.
Hice una versión de prueba para 6 columnas, tomó 11GB. Notepad++ no pudo abrirlo, dice que el archivo es demasiado grande. BD Browser for SQLite se ha colgado durante unos 20 minutos.Muestra una imagen de cómo son los racimos de árboles, aún no sé de qué se trata.
¿Por qué abrirlo? :) Sólo hago una mini copia con una estructura similar para depurar.
Me pregunto cómo se entrenan los árboles sin tomar todos los datos en la memoria. Si la tabla es de 6 gigabytes, entonces se deben utilizar unos 6 gigabytes de memoria. El árbol debe ordenar cada columna como un todo. Si no ponemos todo en la memoria, sino que leemos los datos del disco cada vez, será demasiado lento.
La única variante es mantener los datos en memoria en tipo float en lugar de double, pero esto reducirá la precisión. Para nosotros, con 5 dígitos de precisión, puede no ser tan malo, pero catbust es un software universal, creo que los problemas físicos y matemáticos deberían resolverse en doble precisión.
No he estudiado el código, pero si lo piensas lógicamente, CatBoost probablemente convierte la tabla de datos de muestra y almacena exactamente la variante convertida, lo que se presta a una rápida compresión.
La transformación se produce en una rejilla de cuantificación de cada predictor (hay 6 algoritmos disponibles), y, por ejemplo, de 1000 valores diferentes de una variable quedan 32 variantes (que caen en el rango de una rejilla de cuantificación) y tal vector de datos se comprime fácilmente, además de cifras ya sólo enteras (a juzgar por las restricciones de tamaño de una rejilla - tipo de datos ushort - 2 bytes en un número), y la tabla de cuantificación simplemente se encuentra en la memoria y se utiliza ya entonces en la creación del modelo en un código. Ahora ya hemos reducido el tamaño, y además es posible reducir el volumen eligiendo no todos los predictores para la evaluación, sino su parte, lo que se recomienda hacer en muestras grandes, en las que el algoritmo del aleatorizador permite utilizar en otros árboles aquellos predictores, que no han entrado en la "bolsa" a la vez, debido a esto el entrenamiento será también más rápido, pero habrá más árboles en el modelo. Seguramente hay otros trucos, pero el principal es la cuantificación.
La cuantificación debe considerarse por separado, lo ideal es que cada predictor se empareje con su propia rejilla y que los datos se presenten para el entrenamiento junto con la rejilla, lo que permite al algoritmo hacerlo.
Así, la muestra puede ser autocuantizada y estará bien comprimida.
No he estudiado el código, pero si lo piensas lógicamente, CatBoost probablemente transforma la tabla de datos de muestra y almacena exactamente las variantes transformadas, que son susceptibles de una rápida compresión.
La transformación se produce en una rejilla de cuantificación de cada predictor (hay 6 algoritmos disponibles), y, por ejemplo, de 1000 valores diferentes de una variable quedan 32 variantes (que caen en el rango de una rejilla de cuantificación) y tal vector de datos se comprime fácilmente, además de cifras ya sólo enteras (a juzgar por las restricciones de tamaño de una rejilla - tipo de datos ushort - 2 bytes en un número), y la tabla de cuantificación simplemente se encuentra en la memoria y se utiliza ya entonces en la creación del modelo en un código. Ahora ya hemos reducido el tamaño, y además es posible reducir el volumen eligiendo no todos los predictores para la evaluación, sino su parte, lo que se recomienda hacer en muestras grandes, en las que el algoritmo del aleatorizador permite utilizar en otros árboles aquellos predictores, que no han entrado en la "bolsa" a la vez, debido a esto el entrenamiento será también más rápido, pero habrá más árboles en el modelo. Seguramente hay otros trucos, pero el principal es la cuantificación.
La cuantificación debe considerarse por separado, lo ideal es que cada predictor se empareje con su propia rejilla y que los datos se presenten para el entrenamiento junto con la rejilla, lo que permite al algoritmo hacerlo.
Por eso la muestra puede cuantificarse por sí misma y estará bien comprimida.
Ahora entiendo para qué se utiliza esta rejilla, resulta que es para la compresión. Y es más rápido de ordenar.
Cierto, lo he recordado, parece que hay una parrilla por defecto de 1024 variantes de división. Si sustituye todos los datos por números divididos, puede almacenar en formato ushort, que son 2 bytes en lugar de 8, lo que supone una compresión 4 veces mayor. Seguramente por eso tenías 2gb en lugar de 6 y los usaste.
El valor por defecto es 254, pero no recuerdo cuánto puse entonces. Probablemente se consumieron menos de 2gb de memoria - recuerdo que me sorprendió mucho que fuera tan poco.
De todos modos, este enfoque permite comprimir significativamente los datos, incluso el propio muestreo. No se puede hacer eso con las redes neuronales
Ahora entiendo para qué se utiliza esta rejilla, resulta que para la compresión. Y es más rápido clasificarlo.
El valor por defecto es 254, pero no recuerdo cuánto puse entonces. Probablemente se consumieron menos de 2gb de memoria - recuerdo que me sorprendió mucho que fuera tan pequeña.
Puedes usar uchar entonces, es 1 byte.
Grid permite encajar menos, porque se utiliza un rango de valores. Pero no siempre es bueno, para coger niveles teóricos tendrías que cortar la red tú mismo.
El valor máximo en ushort es de 65 mil - si se establece una cuadrícula de este tipo, puede no molestarse con ella manualmente.
https://www.mql5.com/ru/articles/8385
no es un hecho que sea una buena implementación )
Paso de la rusa.
He leído ese))) está lleno de errores en los cálculos y la red da respuestas bastante aleatorias
Entonces puedes usar uchar , es 1 byte.
En ushort el valor máximo es de 65k - si se establece una rejilla de este tipo, no hay que preocuparse por ella manualmente
Su tamaño máximo es65535, pero no puedo afectar a las variables en el código.
En cuanto al tamaño máximo - no, no garantiza el resultado, porque se puede ajustar a la tira de datos y omitir los que están cerca de ella.
Generalmente es bueno tener un algoritmo de aprendizaje, que siempre comprueba la razonabilidad de la división de cierre (A>10 && A<=15), pero normalmente ocurre al azar - no hay tal condición obligatoria, aunque se reproduce a veces.
He leído este))) hay muchos errores en los cálculos y la red da respuestas bastante aleatorias
¿Quiere escribir la red usted mismo?
Vod aquí es un mínimo de palabras y un máximo de código en python, pero también en inglés.
https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html
¿Quiere escribir la red usted mismo?
Hay un mínimo de palabras y un máximo de código en Python, pero también en inglés.
https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html
Sí, quiero hacerlo yo mismo) porque en todos los artículos, los ejemplos de funciones de activación se cuentan incorrectamente) por ejemplo sigmoide se cuenta como 1/1+exp(-x) en todas partes. Necesito 1,0/1,0+exp(-x). Parece que es lo mismo, pero el terminal da cálculos diferentes) mira si tienes los mismos cálculos) de ahí el error.