L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 2650

 
mytarmailS #:

Utilisez la régression symbolique, concevez exactement ce que vous voulez, et non ce que d'autres algorithmes suggèrent.

Vous connaissez Rku, il y a un paquet, il y a des exemples, tout a été fait avant et pour nous.

J'y travaille. Pas encore de graal)

 
elibrarius #:
Si seulement 1 et 2 peuvent interagir. Ou 3,4,5. Alors, après le premier fractionnement, par exemple sur 3, tous les fractionnements en aval se feront uniquement à partir de l'ensemble 3,4,5.
Je suppose qu'il suffit de construire 2 arbres à partir des ensembles 1,2 et 3,4,5. S'il y a 10 ensembles, alors il y a 10 arbres. Et ainsi de suite.

Il est également possible de fusionner des groupes dans des groupes - on obtient alors un arbre (liste de listes de listes de listes de listes ...).

Le principe général de construction de tels groupes dans notre cas n'est pas très clair.

 
Aleksey Nikolayev #:

J'y travaille. Pas encore de graal).

Maîtrisez-vous le paquet grammEvol ?

 
mytarmailS #:
Recevez-vous le paquet grammEvol ?

gramEvol ? En ce qui concerne les grammaires, vous avez besoin de grammaires paramétriques, où les règles ont des paramètres numériques pour lesquels elles doivent être optimisées. A première vue, je ne les ai pas vues dans le package. Je veux obtenir non seulement les règles x1-x2*x3<0, mais toutes les règles possibles de la forme A<x1-x2*x3<B, où x1, x2, x3 sont des prédicteurs, A et B sont des paramètres.

Non, je bricole au niveau le plus bas - avec Rcpp, en essayant de trouver les bons calculs.

 
Aleksey Nikolayev #:

Je ne les ai pas vus dans l'emballage à première vue.

Tout y est. Tout ce à quoi vous pouvez penser peut y être implémenté.

Regardez les exemples des vignettes, regardez le gthub de l'auteur dans les questions, j'ai posé beaucoup de questions sur les règles là aussi
 
mytarmailS #:
Tout y est. Tout ce à quoi vous pouvez penser peut y être réalisé.

Regardez les exemples des vignettes, regardez le gthub de l'auteur dans les questions, j'ai posé beaucoup de questions sur les règles là aussi.

Merci, je regarderai de plus près quand j'aurai le temps.

 
Aleksey Nikolayev #:

Merci, je regarderai de plus près quand j'aurai le temps.

Il s'agit en fait d'un constructeur de code, vous ne définissez que les éléments dont vous avez besoin.

C'est-à-dire qu'il peut écrire du vrai code lui-même, avec des cycles, des tableaux, tout, tout....

Et comme il peut écrire du code, il peut écrire n'importe quoi, la seule limite est votre imagination, et votre pouvoir de déduction bien sûr.

 
Aleksey Nikolayev #:

gramEvol ? En termes de grammaires, nous avons besoin de grammaires paramétriques, où les règles ont des paramètres numériques pour lesquels elles doivent être optimisées. A première vue, je ne les ai pas vues dans le paquet. Je veux obtenir non seulement les règles x1-x2*x3<0, mais toutes les règles possibles de la forme A<x1-x2*x3<B, où x1, x2, x3 sont des prédicteurs, A et B sont des paramètres.

Non, je bricole au niveau le plus bas - avec Rcpp, en essayant de trouver les bons calculs.

Je ne sais pas si je vous ai bien compris, j'ai écrit un exemple simple en me cognant un peu la tête contre l'écran.

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)

Est-ce que c'est ce que vous vouliez ?

[[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 #:

Je ne sais pas si je vous ai bien compris, j'ai écrit un exemple simple après m'être un peu tapé la tête contre le moniteur.

Est-ce que c'est ce que vous vouliez ?

Cela y ressemble, mais il semble que les paramètres ne puissent prendre que quelques valeurs spécifiées, et non un nombre réel arbitraire.

 
Aleksey Nikolayev #:

Similaire, mais il semble que les paramètres ne puissent prendre que quelques valeurs données, et non un nombre réel arbitraire.


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)


Est-ce mieux ?


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

Vous pouvez également compliquer les expressions

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)