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

 
elibrarius:

Pregunta para los expertos en R.

¿Cómo convertir una matriz con valores absolutos en una matriz de clases softmax?

apply(matr, 1, function (rowvec) { result <- rep(0, length(rowvec)); result[which.max(rowvec)] <- 1; result } )

Y transponer según sea necesario en función de la dimensionalidad de la matriz

 
Maxim Dmitrievsky:

Ah, bueno, todavía no hay bibliotecas... no puedo escribirlas yo mismo )


creo que les escribiré y les pediré que me presten una neurona, si funciona, la devolveré con % :)

Por cierto, se acercan un poco más al original, al menos han añadido mediadores, pero sigue sin ser IA ya que las nuevas sinapsis no se forman ni se reconstruyen solas, según tengo entendido

 
Maxim Dmitrievsky:

Estoy pensando en escribirles, pedirles prestada una red neuronal, y si funciona, se la devolveré con intereses :)

Creo que si no hay progreso en las soluciones con MLP simples, no lo habrá con NS complejas. Además, aunque se sustituya la MLP por una NS más compleja, no es ni mucho menos seguro que el resultado mejore de algún modo. Porque una herramienta diferente requiere un tratamiento diferente, una formulación diferente del problema.

Por ahora me ceñiré a los simples MLP y a los antiguos algoritmos de aprendizaje basados en BP, y ya veré si surge la necesidad real.

 
anónima:

y transponer según sea necesario en función de la dimensionalidad de la matriz

¡Vaya, mucho más corto! Gracias.

Lo he cambiado un poco, estoy creando una nueva matriz copiando de la anterior, por lo que los nombres de las columnas y filas se mantienen. Eso es más universal, en caso de que necesite usarlos más. E inmediatamente invertir la matriz. Según entiendo, apply(x,1,f) siempre! voltea la matriz, porque procesa los datos línea por línea y los combina en columnas.

get_softmax <- function(m){
    t(apply(m, 1, function (row) {r <- row;  r [1:length(row)] <-0 ; r[which.max(row)] <- 1;  r } ))
}

 
Yuriy Asaulenko:

Creo que si no hay cambio en las soluciones con los MLP simples, no lo habrá con los NS complejos. Además, aunque se sustituya la MLP por una NS más compleja, no es ni mucho menos seguro que el resultado mejore de alguna manera. Porque una herramienta diferente requiere un tratamiento diferente, una formulación diferente del problema.

Por ahora me ceñiré a los algoritmos de entrenamiento MLP simples y antiguos, BP, y ya veremos si surge la necesidad real.


Me gusta cuando todo se cuenta rápido, puedes probar muchas estrategias.

Si tuviera un análogo más productivo, me pasaría a él... Pero ahora es un 90% de minería de datos y un 10% de selección de modelos.

 
Maxim Dmitrievsky:

Me gusta que todo se cuente rápido, puedes pasar por muchas estrategias.

Si tuviera un análogo más productivo, me pasaría a él... hasta ahora, el 90% del tiempo es sólo para buscar datos y el 10% para seleccionar modelos.

En cuanto al rendimiento, el tiempo de respuesta de un MLP entrenado de 6 capas (~60 neuronas) es de 0,005s. Es suficiente para casi todo.

En cuanto al tiempo de aprendizaje, que es largo, no es preocupante en absoluto, ya que se necesita mucho más tiempo para pensar en cada uno de los siguientes experimentos: una semana, o incluso más.

Bueno, volver a entrenar cada pocos meses, digamos que pasamos un par de días, no creo que sea un problema. Rehacer el sistema en la lógica lleva mucho más tiempo. Sí, y la formación estándar no funciona: se necesita un largo baile de pandereta entre épocas. Mientras que el entrenamiento estándar (sin baile)) da buenos resultados, pero sólo en una muestra de entrenamiento).

 

Otro problema con R.

En un ordenador está bien, en el otro hay unos requisitos mayores de corrección del código.

Por ejemplo

darch.unitFunction = linearUnit - provocó el bloqueo de Rterm.exe

cambió a

darch.unitFunction ="linearUnit"

este punto comenzó a pasar antes del siguiente error.

También tuve que cambiar library(darch) por require(darch)

Ahora es el aprendizaje en sí lo que es un fastidio.

R_NN <- darch(
darch = NULL,
x = MatrixLearnX ,
y = MatrixLearnY ,
paramsList = params
)

He probado muchas variantes, Rterm.exe siempre se bloquea

¿Tiene R algún tipo de control de nivel de error? ¿Quizás en el segundo PC tengo un nivel de error que resolver al detenerme en cada aviso?

En ambos ordenadores he instalado R con la configuración por defecto, he instalado todos los paquetes.
¿Cómo puedo solucionarlo?

 

Si la biblioteca darch no está instalada, library(darch) causará un error y la ejecución del código se detendrá, y require(darch) simplemente se deformará y el código seguirá funcionando, pero como la biblioteca darch no está instalada, sus funciones no podrán ser llamadas.

El siguiente paso es ejecutar
install.packages("darch", dependencies=TRUE) para instalar automáticamente la biblioteca

 
Yuriy Asaulenko:

En cuanto al rendimiento, el tiempo de respuesta de un MLP entrenado de 6 capas (~60 neuronas) es de 0,005s. Es suficiente para casi todo.

En cuanto al tiempo de aprendizaje, que es largo, no molesta en absoluto, ya que se necesita mucho más tiempo para pensar en cada uno de los próximos experimentos en solitario: una semana, o incluso más.

Bueno, volver a entrenar cada pocos meses, digamos que pasamos un par de días, no creo que sea un problema. Rehacer el sistema en la lógica lleva mucho más tiempo. Sí, y la formación estándar no funciona: se necesita un largo baile de pandereta entre épocas. Y el entrenamiento estándar (sin baile)) da grandes resultados - pero sólo en una muestra de entrenamiento).


Lo estoy haciendo un poco mal - uso activamente el optimizador exactamente para buscar estrategias, es decir, probar fichas, combinaciones de bloques de TS, algo más... Porque a veces incluso no tengo en cuenta alguna nimiedad, que es exactamente lo que me faltaba en el sistema. Y recorrer incluso cien opciones requiere una velocidad de aprendizaje considerable (y 100 opciones es muy poco)... Bueno, cada uno tiene su propio enfoque, no digo que el mío sea mejor. Por supuesto, se puede decir que NS es un optimizador en sí mismo, pero siempre hay algunos hiperparámetros, que pueden ser elegidos en la etapa inicial

 
Maxim Dmitrievsky:

Utilizo activamente el optimizador para buscar estrategias, es decir, para buscar entre las fichas, las combinaciones de los bloques de TS, algo más... porque a veces hay incluso algo pequeño que no he considerado, y que faltaba en el sistema. Y recorrer incluso cien opciones requiere una velocidad de aprendizaje considerable (y 100 opciones es muy poco)... Bueno, cada uno tiene su propio enfoque, no digo que el mío sea mejor. Por supuesto, se puede decir que NS es un optimizador en sí mismo, pero siempre hay una serie de hiperparámetros que se pueden elegir en la etapa inicial.

Así que pronto tendrás que tener una granja minera para las estrategias de minería.