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

 
Rorschach:
Нигде не попадалось исследований как лучше нормировать входы: приращения, вычитать ма, скользящим окном?

Что Вы подразумеваете под "нормировать"? Приведение распределения переменной как можно ближе к нормальному?

 
Aleksey Vyazmikin:

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

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

прочитай те то правило которое я привел в качестве примера и попробуйте встроить генератор правил такого рода в дерево

 
Vladimir Perervenko:

Что Вы подразумеваете под "нормировать"? Приведение распределения переменной как можно ближе к нормальному?

Приведение диапазона переменной к +-1

 
Vladimir Perervenko:

в продолжении личной беседы 

ваш вариант

umap_transform(X = X[tr,], model = origin.sumap, n_threads = 4L, 
               verbose = TRUE) -> train.sumap
head(train.sumap)
[1,] 22.196741
[2,] 14.934501
[3,] 17.350166
[4,]  1.620347
[5,] 17.603270
[6,] 16.646723

обычный вариант

train.sumap <- umap_transform(X = X[tr,], model = origin.sumap, n_threads = 4L, 
               verbose = TRUE)
head(train.sumap)
[1,] 22.742882
[2,]  7.147971
[3,]  6.992639
[4,]  1.598861
[5,]  7.197366
[6,] 17.863510

как видите значения совсем другие, можете у себя проверить


У меня в модели 

n_components = 1

потому только одна колонка, но это не важно на самом деле

===================UPD

Блин они при каждом запуске  umap_tranform разные, так же не должно быть

 
mytarmailS:

прочитай те то правило которое я привел в качестве примера и попробуйте встроить генератор правил такого рода в дерево

А в чем проблема - создайте компоненты в начале из которых будут складываться правила.

 
Aleksey Vyazmikin:

А в чем проблема - создайте компоненты в начале из которых будут складываться правила.

да черт его знает, не могу собраться с мыслями

 
mytarmailS:

в продолжении личной беседы 

ваш вариант

обычный вариант

как видите значения совсем другие, можете у себя проверить


У меня в модели 

потому только одна колонка, но это не важно на самом деле

===================UPD

Блин они при каждом запуске  umap_tranform разные, так же не должно быть

не обращал внимание. Давно это было...

 
mytarmailS:

в продолжении личной беседы 

ваш вариант

обычный вариант

как видите значения совсем другие, можете у себя проверить


У меня в модели 

потому только одна колонка, но это не важно на самом деле

===================UPD

Блин они при каждом запуске  umap_tranform разные, так же не должно быть

Обычно для повторяемости устанавливают Seed (встроенного ГСЧ) в какое-то значение. Если нет, то берется рандом. Возможно в этом пакете Seed тоже есть - проверьте.
 
elibrarius:
Обычно для повторяемости устанавливают Seed (встроенного ГСЧ) в какое-то значение. Если нет, то берется рандом. Возможно в этом пакете Seed тоже есть - проверьте.

да думаю что есть, но суть в том что и без ГСЧ должно быть всегда одинаково, в пакете аналоге "umap" постоянно один и тот же результат

 
Aleksey Vyazmikin:

специально для вас, только с одной надеждой что будете р-ку учить)

install.packages("TTR","uwot")

clos <- d$X.CLOSE.

get.ind <- function(x,n=5){
  
  all_to.all_colums <- function(x,names){
    cb <- combn(ncol(x),2)
    res <- matrix(ncol = 0,nrow = nrow(x))
    for(i in 1:ncol(cb)){
      j1 <- cb[1,i]
      j2 <- cb[2,i]
      
      res <- cbind(res,   x[,j1] - x[,j2]  )
      colnames(res) <- paste0(names, 1:ncol(res))
    }
    return(res)}
  
  library(TTR)
  aroon  <- aroon(x,n)
  BBands <- BBands(x,n)            ;   BBands <- all_to.all_colums( BBands, names = "BBands")
  CCI    <- CCI(x,n)
  CMO    <- CMO(x,n)
  DEMA   <- diff(c(0,DEMA(x,n)))
  Donchian <- DonchianChannel(x,n) ;   Donchian <- all_to.all_colums( Donchian, names = "Donchian")
  MACD   <- MACD(x,n)
  moment <- momentum(x,n)
  PBands <- PBands(x,n)            ;   PBands <- all_to.all_colums( PBands, names = "PBands")
  RSI    <- RSI(x,n)
  SAR    <- diff(c(0,SAR(cbind(x,x,n))))   
  SMA    <- diff(c(0,SMA(x,n)))
  stoch  <- stoch(x,n)
  TDI    <- TDI(x,n)
  VHF    <- VHF(x,n)
  WPR    <- WPR(x,n)
  
  ind <- cbind.data.frame(aroon,BBands,CCI,CMO,DEMA,Donchian,
                          MACD,moment,PBands,
                          RSI,SAR,SMA,stoch,TDI,VHF,WPR)
  return(ind)
}
get.target <- function(x, change){
  zz <- TTR::ZigZag(x,change = change,percent = F)
  zz <- c(diff(zz),0) ; zz[zz>=0] <- 1 ; zz[zz<0] <- -1
  return(zz)
}

X <- get.ind(clos)
Y <- as.factor(get.target(clos,change = 0.001))


library(uwot)

train.idx <- 100:8000
test.idx <- 8001:10000

UM <- umap(X = X[train.idx,],
           y = Y[train.idx], 
            approx_pow = TRUE, 
            n_components = 3, 
            ret_model = TRUE,
            n_threads = 4L, 
            scale = T)

predict.train <- umap_transform(X = X[train.idx,], 
                                model = UM, n_threads = 4L, 
                                verbose = TRUE)

predict.test <- umap_transform(X = X[test.idx,], 
                                model = UM, n_threads = 4L, 
                                verbose = TRUE)



library(car)

scatter3d(x = predict.train[,1], 
          y = predict.train[,2], 
          z = predict.train[,3],
          groups = Y[train.idx],
          grid = F, 
          surface = F,
          ellipsoid = F,
          bg.col = "black",surface.col = c(2,3))

там сразу две функции

get.ind

и

get.target

первая создает дата сет из индикаторов, вторая целевую из зигзаг

все что вам надо это загрузить данные с ценой закрытия в 10к и записать ее в переменную clos

и получите свой umap с целевой


https://github.com/jlmelville/uwot