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

 
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)
 
mytarmailS #:



Так лучше?


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

можно еще поусложнять выражения

Да, со списком неплохо придумано.

Чтобы был настоящий double, по сути, нужны алгебраические типы данных. Не видел пока их реализацию для R, да и генетическая оптимизация с ними точно не получится (вообще не понятно какая оптимизация с ними будет работать).

 

Я не знаю как вас , но меня просто очаровывает этот алгоритм.. Как из протсых переменных внизу складываються большые сложные выражения ввергу, иерархия, как и в природе...

 
Aleksey Nikolayev #:

Да, со списком неплохо придумано.

Чтобы был настоящий double, по сути, нужны алгебраические типы данных. Не видел пока их реализацию для R, да и генетическая оптимизация с ними точно не получится (вообще не понятно какая оптимизация с ними будет работать).

ну да, есть ограничения, ведь каждая цыфра для ГП это отдельный елемент в списке, так что если их будет много то беда(( , но можно же выйти из ситуации как я показал

 
mytarmailS #:

Я не знаю как вас , но меня просто очаровывает этот алгоритм.. Как из протсых переменных внизу складываються большые сложные выражения ввергу, иерархия, как и в природе...

Чем это лучше МГУА? Очаровываться можно чем угодно, был бы прок :)
 
Maxim Dmitrievsky #:
Чем это лучше МГУА? Очаровываться можно чем угодно, был бы прок :)
Ну это разное..
Символьная регрессия это фреймворк в котором можно реализовать любую Логику.  Это просто удобно, потому что не надо самому писать... 

А данная реализация правил, да это очень похоже на мгуа - feature ingеniring +feature selection+make model 
Все в одном как и мгуа. 
Ну если уж сравнивать эту конкретную реализацию с мгуа то:
МГУА не может работать с большим количеством признаков,  так как там полный перебор. 
Это плохо,  но зато мгуа находит гарантировано лучшее решение,  это хорошо. 

В данной реализации все с точностью наоборот 
 
mytarmailS #:
Ну это разное..
Символьная регрессия это фреймворк в котором можно реализовать любую Логику.  Это просто удобно, потому что не надо самому писать... 

А данная реализация правил, да это очень похоже на мгуа - feature ingеniring +feature selection+make model 
Все в одном как и мгуа. 
Ну если уж сравнивать эту конкретную реализацию с мгуа то:
МГУА не может работать с большим количеством признаков,  так как там полный перебор. 
Это плохо,  но зато мгуа находит гарантировано лучшее решение,  это хорошо. 

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

                                                 немножко Про инвариантность к событиям

Допустим мы хотим описать закономерность голова и плечи (представим что такое существует)  , наш алгоритм смотрит последние Н-точек допустим 7 как на примере

зеленым прямоугольником выделена область видимости алгоритма . Последние Н-точек, в данном примере 7 штук.

Данные в таком виде мы обрабатываем, подаем в АМО итп, скользящее окно кароч. всем это извесно..

Если описать закономерность правилами то будет что то типа x[1] < x[2] & x[2] > x[3] итд....

Но в реальности рынок меняеться, растягиваеться/сужаеться, меняються амплитуды итп...


Вот как бы реальность рынка, а мы все смотрим последние 7 точек и жем что наше правило  x[1] < x[2] & x[2] > x[3]... сработает ))

Как видно, закономерность есть, она никуда не делась, но наш крутой 10-ти слойный GPT-5 ничего не увидит )


Выводы.  Все алгоритмы АМО "из коробки" работают с табличными данными тоесть все алгоритмы ищут закономерности с ЖЕСТКОЙ привязкой к индексам , это не работает..

1) Надо смотреть в сторону алгоритмов типа асоциативных правил, которые завязаны на события, последовательность событий, но не привязаны к индексам.

2) Либо самим проектировать правильные правила, и из них лепить модели

3) Либо использовать для АМО такое представление данных какое используют для алгоритмов асоциативных правил/последовательностей , но там тогда количество признаков будет милиарды

 
Aleksey Nikolayev #:

вообще не понятно какая оптимизация с ними будет работать

В смысле? Есть же непрерывная оптимизация это double и дискретная оптимизация это целочисленая. Или я не понял мысли? 

ГП дискретная,  потому и проблемы с double
Причина обращения: