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

 
Dr. Trader:

Но почему вы считаете что раз линейная модель делает экстраполяцию по формуле y=ax+b то она это делает отлично, а раз лес это делает по ближайшему известтному соседу то он ничего не умеет? Оба этих алгоритма имеют право на существование. 


Я ничего не считаю, я показал вам пример и кучу статей. Какая разница отлично делает ЛР это или нет. Смысл в том что РФ не умеет экстраполировать ВОООБЩЕ, конструктивно, никогда и ни при каких условиях, а ЛР приведена для сравнения и наглядности.

Вот об этом я и спрашиваю и попросил всего лишь ПОНЯТНЫХ примеров почему вы считаете что это не так :) 

 
Алёша:



Да причем тут "статьи"??? Вы что издеваетесь? Я же привел пример Минского, который как Ньютон только в ML и он так ярко облажался, а Вы говорите про вбросы на хабре или скрипты в R(читай: сам алгоритм не собирал подрочил немного параметры)


Если бы сами лес собрали на С++ то догадались бы сделать "экстраполяцию" аля MLP, а в R... Бог в помощь...


Я не знаю никакого Минского и Пожарского и не понимаю что у вас нарисовано на графиках ) нужно обучить RF какому-нибудь сэту с целевыми от 0 до 10 или до 100, а потом подсунуть вариант, в котором ответ должен быть заведомо больше 100, и РФ должен выдать толкьо 100

вот у автора в статье:

# set up functionality for modelling down the track
library(xgboost) # extreme gradient boosting
library(nnet) # neural network
library(ranger) # for random forests
library(rpart) # for demo single tree
library(rpart.plot)
library(viridis) # for palette of colours
library(grid) # for annotations

# sample data - training set
set.seed(134) # for reproducibility
x <- 1:100 + rnorm(100)
y <- 3 + 0.3 * x + rnorm(100)

# extrapolation / test set, has historical data plus some more extreme values
extrap <- data.frame(x = c(x, 1:5 * 10 + 100))

mod_lm <- lm(y ~ x)
mod_nn <- nnet(y ~ x, size = 8, linout = TRUE)

# XG boost.  This is a bit more complicated as we need to know how many rounds
# of trees to use.  Best to use cross-validation to estimate this.  Note - 
# I use a maximum depth of 2 for the trees which I identified by trial and error
# with different values of max.depth and cross-validation, not shown
xg_params <- list(objective = "reg:linear", max.depth = 2)
mod_cv <- xgb.cv(label = y, params = xg_params, data = as.matrix(x), nrounds = 40, nfold = 10) # choose nrounds that gives best value of root mean square error on the training set
best_nrounds <- which(mod_cv$test.rmse.mean == min(mod_cv$test.rmse.mean))
mod_xg <- xgboost(label = y, params = xg_params, data = as.matrix(x), nrounds = best_nrounds)

mod_rf <- ranger(y ~ x)

p <- function(title) {
    plot(x, y, xlim = c(0, 150), ylim = c(0, 50), pch = 19, cex = 0.6,
        main = title, xlab = "", ylab = "", font.main = 1)
    grid()
}

predshape <- 1

par(mfrow = c(2, 2), bty = "l", mar = c(7, 4, 4, 2) + 0.1)

p("Linear regression")
points(extrap$x, predict(mod_lm, newdata = extrap), col = "red", pch = predshape)

p("Neural network")
points(extrap$x, predict(mod_nn, newdata = extrap), col = "blue", pch = predshape)

p("Extreme gradient boosting")
points(extrap$x, predict(mod_xg, newdata = as.matrix(extrap)), col = "darkgreen", pch = predshape)

p("Random forest")
fc_rf <- predict(mod_rf, data = extrap)
points(extrap$x, fc_rf$predictions, col = "plum3", pch = predshape)

grid.text(0.5, 0.54, gp = gpar(col = "steelblue"),
          label = "Tree-based learning methods (like xgboost and random forests)\nhave a particular challenge with out-of-sample extrapolation.")
grid.text(0.5, 0.04, gp = gpar(col = "steelblue"),
          label = "In all the above plots, the black points are the original training data,\nand coloured circles are predictions.")

Я r плохо понимаю, понимаю только что от 100 до 150 RF должен был спрогнозировать адекватный результат как и другие модели, но этого не произошло


 
Алёша:

Не должен. Он выдаст локальную интерполяцию ближайших точек, как Knn(квази-оптимальный классификатор ) но грубее. Вы просто не умеете вращать базисы в деревьях RF и у Вас он выходит "кубиками"


ну вот в предыдущем сообщении добавил код со скрином, что там "не так"?

 
Алёша:

То что в алгоритме леса деревья делят точки по одному признаку ортогонально, если вращать базис то получится также как и в MLP, для этого нужно залезть в код леса и поправить или свой лес написать)))


ну извините, это уже тогда какой-то не такой лес получится, я же про классическую версию

я пытаюсь то что есть освоить, ку да там что-то писать..

в итоге то что, классический РФ не умеет экстраполировать

 
Алёша:

В ML нет "классики" есть то что работает и решает проблему. Осваивать чужие алгоритмы во всем их многообразии так же осмысленно как вникнуть в код всех индикаторов в кодобазе и маркете, что сами понимаете не разумно...

Есть не так много базовых эвристик в ML, которые нужно освоить самостоятельно, в ручную, чтобы "от пальцев отскакивало", чтобы ночью с бодуна разбудили и Вы сходу по памяти набили на С++ градиентный бустинг за пол часа(шутка), это не так сложно как кажется, а потом 100500 вариаций алгоритмов уровня статей на хабре сможете генерировать сами.


Охохо...

Dr. Trader повторял дважды, Вам тоже повторю, третий, говорят Бог и нечистый три раза хотят услышать, это что то значит, в мистическом контексте...

Новые точки В ПРОСТРАНСТВЕ ПРИЗНАКОВ, по отношению к физическому времени НЕ РАСПОЛОЖЕНО СТРОГО ЗА ПРЕДЕЛАМИ ОБУЧАЮЩЕГО ОБЛАКА ТОЧЕК, время это время, в фичи Ваши это фичи, ну не связанно физическое время линейно  с например моментумом или спектром. "Экстраполируемые" точки будут где угодно и внутри и снаружи в Вашем признаковом пространстве.


а я про это и не говорил, я говорил только про то что структура древ такова, что если они разветвились по всем обучающим значениям целевых, то модель будет выдавать строго то, на что она разветвлена, и никаких новых значений она выдать не сможет.. по крайней мере это то, что написано в статье с примером. Ну я сделаю своих примеров и покажу потом тогда что у меня получилось :) Если было крайнее значение у целевой 100 при обучении, то на выходе она больше 100 не может выдать.. потмоу что все значения выше 100 попадут в лист 100, у нее чисто физически нет листов со значениями больше 100.

 
Maxim Dmitrievsky:

Если было крайнее значение у целевой 100 при обучении, то на выходе она больше 100 не может выдать.. потмоу что все значения выше 100 попадут в лист 100.

Нормирование совсем не просто так придумано.
 
Yuriy Asaulenko:
Нормирование совсем не просто так придумано.

это понятно, вопрос принципиальный по поводу функционирования деревьев. Как вы не нормируйте, любой выброс на новых данных дерево не экстраполирует, а выдаст крайнее значение, которое оно знает. Поэтому нормализовать данные для деревьев вообще то не обязательно.

 
Maxim Dmitrievsky:

это понятно, вопрос принципиальный по поводу функционирования деревьев. Как вы не нормируйте, любой выброс на новых данных дерево не экстраполирует, а выдаст крайнее значение, которое оно знает. Поэтому нормализовать данные для деревьев вообще то не обязательно.

В РФ для себя пока не вижу необходимости, а вот для МЛП не только нормирую, но и пропускаю входной сигнал через сигмоид -т.е. динамический диапазон входов ограничен и выбросы не имеют значения.
 
Maxim Dmitrievsky:

это понятно, вопрос принципиальный по поводу функционирования деревьев. Как вы не нормируйте, любой выброс на новых данных дерево не экстраполирует, а выдаст крайнее значение, которое оно знает. Поэтому нормализовать данные для деревьев вообще то не обязательно.

я думаю решение в данном случае простое, ввести обратную связь.

с уважением.

 
Andrey Kisselyov:

я думаю решение в данном случае простое, ввести обратную связь.

с уважением.


у меня есть :) мне вообще не принципиально что он не может экстраполировать или может.. модель будет по заранее известному набору предсказывать.. просто для общего образования

там еще ошибки какие-то по моему в либе с получением ошибок модели, чем меньше вборка тем всегда меньше ошибка, хз пока не опнял рпикола

Причина обращения: