交易中的机器学习:理论、模型、实践和算法交易 - 页 2650

 
mytarmailS #:

使用符号回归,准确设计你想要的,而不是其他算法建议的。

你知道 Rku,有一个软件包,有一些例子,一切都已经在我们之前完成了。

我正在研究。还没有圣杯)

 
elibrarius #:
如果只有 1 和 2 可以互动。或 3、4、5。那么在第一次拆分后,例如在 3 上,所有下游的拆分都只能从集合 3、4、5 开始。我假设,只需从 1,2 和 3,4,5 组建立两棵树。如果有 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形式的所有可能规则其中 x1、x2、x3 是预测因子,A 和 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)