Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2649

 
mytarmailS #:

Используйте символьню регресию, спроектируйте именно те правалиа что вы хотите, а не те что предлагаються другими алгоритмами.

Вы же знаете Рку, есть пакет, есть примеры, все уже сделано до нас и для нас

Работаю над этим. Грааля пока не получается)

 
elibrarius #:
Если взаимодействовать могут только 1 и 2. Или 3,4,5. То после первого же сплита, например по 3, все нижестоящие сплиты будут только из набора 3,4,5.
Предполагаю, что просто строится 2 дерева из 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 #:

  На первый взгляд не увидел их в пакете.

Есть там все. Все что можете придумать там можно реализовать.

Посмотрите примеры из винеток,  посмотрите гтхаб автора в вопросах,  там и я много вопров задавал про правила
 
mytarmailS #:
Есть там все. Все что можете придумать там можно реализовать.

Посмотрите примеры из винеток,  посмотрите гтхаб автора в вопросах,  там и я много вопров задавал про правила

Спасибо, посмотрю повнимательнее как появится время.

 
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)