Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 2650

 
mytarmailS #:

Verwenden Sie die symbolische Regression, entwerfen Sie genau das, was Sie wollen, und nicht das, was andere Algorithmen vorschlagen.

Sie kennen Rku, es gibt ein Paket, es gibt Beispiele, alles wurde schon vor uns und für uns gemacht.

Ich arbeite daran. Noch kein Gral)

 
elibrarius #:
Wenn nur 1 und 2 interagieren können. Oder 3,4,5. Dann werden nach dem ersten Split, zum Beispiel auf 3, alle nachfolgenden Splits nur aus der Menge 3,4,5 sein.
Ich nehme an, dass einfach 2 Bäume aus den Mengen 1,2 und 3,4,5 gebildet werden. Wenn es 10 Mengen gibt, dann gibt es auch 10 Bäume. Und so weiter.

Es ist auch möglich, Gruppen in Gruppen zusammenzufassen - man erhält einen Baum (Liste von Listen von Listen von Listen von Listen ...).

Das allgemeine Prinzip der Bildung solcher Gruppen ist in unserem Fall nicht ganz klar.

 
Aleksey Nikolayev #:

Ich arbeite daran. Noch kein Gral.)

Beherrschen Sie das grammEvol-Paket?

 
mytarmailS #:
Bekommen Sie das grammEvol-Paket?

gramEvol? Wenn es sich um Grammatiken handelt, brauchen Sie parametrische Grammatiken, bei denen die Regeln numerische Parameter haben, für die sie optimiert werden müssen. Auf den ersten Blick habe ich sie in dem Paket nicht gesehen. Ich meine, nicht nur Regeln x1-x2*x3<0 zu erhalten , sondern alle möglichen Regeln der Form A<x1-x2*x3<B, wobei x1, x2, x3 Prädiktoren, A und B Parameter sind.

Nein, ich tüftle auf der untersten Ebene - mit Rcpp - und versuche, die richtige Mathematik zu finden.

 
Aleksey Nikolayev #:

Ich habe sie auf den ersten Blick nicht in der Verpackung gesehen.

Alles ist da. Alles, was Sie sich vorstellen können, kann dort implementiert werden.

Schauen Sie sich die Beispiele aus den Vignetten an, schauen Sie auf dem gthub des Autors in den Fragen, ich habe dort auch viele Fragen zu den Regeln gestellt
 
mytarmailS #:
Alles ist dort. Alles, was Sie sich vorstellen können, kann dort realisiert werden.

Schauen Sie sich Beispiele aus den Vignetten an, schauen Sie sich den gthub des Autors in den Fragen an, ich habe dort auch viele Fragen zu den Regeln gestellt

Danke, ich werde es mir genauer ansehen, wenn ich Zeit habe.

 
Aleksey Nikolayev #:

Danke, ich werde mir das genauer ansehen, wenn ich Zeit habe.

Dies ist eigentlich ein Code-Konstruktor, man setzt nur die Elemente, die man braucht.

Das heißt, es kann selbst echten Code schreiben, mit Zyklen, Arrays, alles, alles....

Und da es Code schreiben kann, kann es alles schreiben, die einzige Grenze ist Ihre Vorstellungskraft, na ja, und natürlich Ihre Schlussfolgerungsfähigkeit.

 
Aleksey Nikolayev #:

gramEvol? Wenn es sich um Grammatiken handelt, brauchen wir parametrische Grammatiken, bei denen die Regeln numerische Parameter haben, für die sie optimiert werden müssen. Auf den ersten Blick habe ich sie in dem Paket nicht gesehen. Ich meine, nicht nur Regeln x1-x2*x3<0 zu erhalten , sondern alle möglichen Regeln der Form A<x1-x2*x3<B, wobei x1, x2, x3 Prädiktoren sind, A und B Parameter sind.

Nein, ich tüftle auf der untersten Ebene - mit Rcpp - und versuche, die richtige Mathematik zu finden.

Ich weiß nicht, ob ich Sie richtig verstanden habe, ich habe ein einfaches Beispiel geschrieben, indem ich meinen Kopf ein wenig gegen den Monitor geschlagen habe.

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)

Ist es das, was Sie wollten?

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

Ich weiß nicht, ob ich Sie richtig verstanden habe. Ich habe ein einfaches Beispiel geschrieben, nachdem ich mir ein wenig den Kopf am Monitor zerbrochen hatte.

Ist es das, was Sie wollten?

Es sieht so aus, aber es scheint, dass Parameter nur einige wenige festgelegte Werte annehmen können, nicht eine beliebige reelle Zahl.

 
Aleksey Nikolayev #:

Ähnlich, aber es scheint, dass Parameter nur einige wenige Werte annehmen können, nicht eine beliebige reelle Zahl.


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)


Ist das besser?


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

Sie können die Ausdrücke auch verkomplizieren

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)
Grund der Beschwerde: