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

 
Aleksey Nikolayev #:

Trabajando en ello. Aún no hay grial).

¿Estás dominando el paquete grammEvol?

 
mytarmailS #:
¿Está recibiendo el paquete grammEvol?

¿gramEvol? Si en términos de gramáticas, necesitas gramáticas paramétricas, donde las reglas tienen parámetros numéricos para ser optimizadas. A primera vista no los vi en el paquete. Me refiero a obtener no sólo las reglas x1-x2*x3<0, sino todas las reglas posibles de la forma A<x1-x2*x3<B, donde x1, x2, x3 son predictores, A y B son parámetros.

No, estoy jugando en el nivel más bajo - con Rcpp, tratando de encontrar la matemática correcta.

 
Aleksey Nikolayev #:

No los vi en el paquete a primera vista.

Todo está ahí. Todo lo que se te ocurra se puede implementar allí.

Mira los ejemplos de las viñetas, mira el gthub del autor en las preguntas, yo también hice muchas preguntas sobre las reglas allí
 
mytarmailS #:
Todo está ahí. Cualquier cosa que se te ocurra puede realizarse allí.

Mira los ejemplos de las viñetas, mira el gthub del autor en las preguntas, yo también hice muchas preguntas sobre las reglas allí

Gracias, voy a echar un vistazo más de cerca cuando tenga tiempo.

 
Aleksey Nikolayev #:

Gracias, le echaré un vistazo cuando tenga tiempo.

Esto es en realidad un constructor de código, sólo se establecen los elementos que necesita.

Es decir, puede escribir código real por sí mismo, con ciclos, arrays, todo, todo....

Y como puede escribir código, puede escribir cualquier cosa, el único límite es tu imaginación, bueno, y tu poder deductivo, claro.

 
Aleksey Nikolayev #:

¿GramEvol? Si en términos de gramáticas, necesitamos gramáticas paramétricas, donde las reglas tienen parámetros numéricos para ser optimizadas. A primera vista no los vi en el paquete. Me refiero a obtener no sólo reglas x1-x2*x3<0, sino todas las reglas posibles de la forma A<x1-x2*x3<B, donde x1, x2, x3 son predictores, A y B son parámetros.

No, estoy jugando en el nivel más bajo - con Rcpp, tratando de encontrar la matemática correcta.

No sé si te he entendido bien, he escrito un ejemplo sencillo golpeándome un poco la cabeza contra el monitor.

library(gramEvol)
ruleDef <- list(
  logyc_exp     = grule(comparison(big_math_expr, parameters)),
  comparison    = grule(">=","<=","!=","=="),
  parameters    = grule(100,200,300),  #   A и B - параметры.
  
  
  big_math_expr = grule( math_expr,  math_oper(math_expr, math_expr)),
  math_expr     = grule(math_oper(predictors, predictors)),
  math_oper     = grule("+", "-", "*","/"),
  predictors    = grule(x1,x2,x3,x4) #   где x1, x2, x3 - предикторы
  )

grammarDef <- CreateGrammar(ruleDef)
GrammarRandomExpression(grammarDef,numExpr = 10)

¿Es eso lo que querías?

[[1]]
expression(x4 * x1 + (x2 + x4) <= 100)

[[2]]
expression(x1/x3 * (x4/x1) >= 300)

[[3]]
expression(x2/x1 + x1 * x1 != 300)

[[4]]
expression(x4 - x3 + (x3 + x1) != 100)

[[5]]
expression(x2/x1/(x2 + x1) != 300)

[[6]]
expression(x3/x1 + (x3 + x3) >= 100)

[[7]]
expression(x1 * x1 >= 200)

[[8]]
expression(x3/x2 - x3/x2 <= 100)

[[9]]
expression((x3 + x4)/(x4 - x1) <= 300)

[[10]]
expression(x3/x1 <= 200)
 
mytarmailS #:

No sé si te he entendido bien, he escrito un ejemplo sencillo después de golpearme un poco la cabeza contra el monitor.

¿Es eso lo que querías?

Parece que sí, pero parece que los parámetros sólo pueden tomar unos valores especificados, no un número real arbitrario.

 
Aleksey Nikolayev #:

Similar, pero parece que los parámetros sólo pueden tomar unos valores dados, no un número real arbitrario.


my_var <- round(seq(-10,10,length.out = 100),2)

library(gramEvol)
ruleDef <- list(
  logyc_exp     = grule(comparison(big_math_expr, parameters)),
  comparison    = grule(">=","<=","!=","=="),
  #parameters    = grule(100,200,300),  #   A и B - параметры.
  parameters    = do.call(gsrule, as.list(my_var)),  #   A и B - параметры.
  
  
  big_math_expr = grule( math_expr,  math_oper(math_expr, math_expr)),
  math_expr     = grule(math_oper(predictors, predictors)),
  math_oper     = grule("+", "-", "*","/"),
  predictors    = grule(x1,x2,x3,x4) #   где x1, x2, x3 - предикторы
)

grammarDef <- CreateGrammar(ruleDef)
GrammarRandomExpression(grammarDef,numExpr = 10)
[[1]]
expression(x1 - x2 != 9.6)

[[2]]
expression(x3 + x1 != 9.8)

[[3]]
expression(x2 - x1 - x1 * x1 == 9.8)

[[4]]
expression(x4/x3 - (x2 - x3) != 8.59)

[[5]]
expression(x4 + x2 >= -8.18)

[[6]]
expression((x1 - x4)/(x3 * x2) <= 6.57)

[[7]]
expression(x2 - x1 >= 1.92)

[[8]]
expression(x1 * x3 + x3/x4 != -2.93)


¿Es mejor así?


=====================

También puedes complicar las expresiones

library(gramEvol)
ruleDef <- list(
  
  final_exp     = grule(logyc_exp , logyc_exp | logyc_exp , logyc_exp & logyc_exp),
  
  
  logyc_exp     = grule(logyc_oper(big_math_expr, parameters),
                        logyc_oper(big_math_expr, big_math_expr)),
  
  
  logyc_oper    = grule(">=","<=","!=","=="),
  parameters    = do.call(gsrule, as.list(my_var)),  #   A и B - параметры.
  
  
  big_math_expr = grule( math_expr,  math_oper(math_expr, math_expr)),
  math_expr     = grule(math_oper(predictors, predictors)),
  math_oper     = grule("+", "-", "*","/"),
  predictors    = grule(x1,x2,x3,x4) #   где x1, x2, x3 - предикторы
)

grammarDef <- CreateGrammar(ruleDef)
GrammarRandomExpression(grammarDef,numExpr = 10)
[[1]]
expression(x3 * x2 <= x2 * x3 - (x4 - x4))

[[2]]
expression(x2/x1 != x3 - x1 | (x1 + x3)/(x1 * x3) >= -9.6)

[[3]]
expression(x4 + x3 - (x2 - x2) >= 3.94 & x3 * x2 * (x1 - x3) == x2 * x1)

[[4]]
expression(x3 * x3 - x2 * x4 == -6.97)

[[5]]
expression(x4 * x4 - (x1 + x4) <= x4/x4 - x3/x2 | (x3 + x1)/(x4 - x1) >= x2 * x3)

[[6]]
expression(x2 + x3 + x2/x1 != -3.74)

[[7]]
expression((x1 - x2)/(x2 + x1) <= (x3 - x3)/(x2 - x1) & x4/x2 - x4 * x2 <= 6.97)
 
mytarmailS #:



¿Así está mejor?


=====================

puedes complicar aún más las expresiones

Sí, lo de la lista es una buena idea.

Para hacer un doble de verdad, necesitas tipos de datos algebraicos. Todavía no he visto su implementación para R, y la optimización genética no funcionará con ellos( no está claro qué tipo de optimización funcionará con ellos en absoluto).

 

No sé a ti, pero a mí me fascina este algoritmo... Cómo simples variables en la parte inferior se suman a grandes expresiones complejas en la parte superior, una jerarquía, al igual que en la naturaleza....