トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 2650

 
mytarmailS #:

シンボリック回帰を使用し、他のアルゴリズムが提案するものではなく、あなたが望むものを正確に設計する。

Rkuをご存知でしょう、パッケージがあり、例があり、すべてが以前から行われていて、私たちのために行われています。

私はそれに取り組んでいる。まだ聖杯はない)

 
elibrarius #:
もし1と2だけが相互作用できるなら。あるいは3,4,5。そうすると、最初の分割、たとえば3での分割の後、すべての下流の分割はセット3,4,5からのみとなる。単純に1,2と3,4,5のセットから2つのツリーを構築すると仮定します。セットが10個あれば、ツリーも10個になる。というように。

グループをグループにマージすることも可能で、その場合はツリー(リストのリストのリストのリスト...)になる。

私たちの場合、このようなグループを作る一般的な原理はよくわからない。

 
Aleksey Nikolayev #:

取り組んでいる。まだ聖杯はない)

grammEvolパッケージを使いこなしていますか?

 
mytarmailS #:
grammEvolパッケージを入手していますか?

gramEvol?もし文法という観点なら、パラメトリック文法が必要で、ルールには最適化されるべき数値パラメータがある。一見したところ、そのようなパッケージは見当たりませんでした。つまり、x1-x2*x3< 0のルールだけでなく、A<x1-x2*x3<B(x1,x2,x3は予測子、AとBはパラメータ)の形のすべての可能なルールを 得るということだ。

Rcppを使って、正しい数学を見つけようとしている。

 
Aleksey Nikolayev #:

一見したところ、パッケージにはなかった。

すべてがそこにある。思いつくものはすべてそこに実装できる。

ビネットの例を見たり、作者のgthubの質問を見たりしてください。
 
mytarmailS #:
すべてがそこにある。思いつくことは何でもそこで実現できる。

ヴィネットの例を見たり、著者のgthubの質問を見たりしてください。

ありがとう、時間があるときによく見てみるよ。

 
Aleksey Nikolayev #:

ありがとう、時間があるときによく見てみるよ。

これは実際にはコードのコンストラクタで、必要な要素だけをセットする。

つまり、サイクルや配列、あらゆるものを使って、本物のコードを書くことができるんだ。

そして、コードを書くことができるのだから、何でも書くことができる。唯一の限界は、あなたの想像力、そう、もちろん推理力だ。

 
Aleksey Nikolayev #:

gramEvol?文法という観点で言えば、ルールが最適化されるべき数値パラメーターを持つパラメトリック文法が必要だ。一見したところ、このパッケージにはそのようなものは見当たりませんでした。x1-x2*x3< 0のルールだけでなく,A<x1-x2*x3<Bの形のすべての可能なルールを 得ることを意味します

Rcppを使って、正しい数学を見つけようとしている。

モニターに頭をぶつけて、簡単な例を書いてみたんだ。

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)

それはあなたが望んでいたことですか?

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

モニターに頭を少しぶつけてから、簡単な例を書いたんだ。

それがあなたの望んだことですか?

そのように見えますが、パラメータは任意の実数ではなく、いくつかの指定された値しか取ることができないようです。

 
Aleksey Nikolayev #:

似たようなものだが、パラメータは任意の実数ではなく、いくつかの与えられた値しかとれないようだ。


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)


その方がいいのだろうか?


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

式を複雑にすることもできます

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)