Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 497

 
Dr. Trader:

Mas por que você acha que se o modelo linear extrapolar usando a fórmula y=ax+b, ele o faz perfeitamente, mas se a floresta o faz usando o vizinho conhecido mais próximo, ele não faz nada? Estes dois algoritmos têm o direito de existir.


Não estou a contar nada, mostrei-te um exemplo e um monte de artigos. Que diferença faz se o LR o faz perfeitamente ou não. A questão é que a RF não pode extrapolar de forma alguma, construtivamente, nunca e em nenhuma circunstância, enquanto a LR é dada para comparação e clareza.

É isso que estou a pedir e só pedi exemplos SUBSTANCIAIS do porquê de pensares que está errado :)

 
Aliosha:



O que é que isso tem a ver com "artigos"? Estás a brincar comigo? Dei-te um exemplo do Minsky, que é como o Newton só no ML e ele fez tanta asneira, e estás a falar de lixo no Habra ou de scripts no R (leia-se: eu não construí o algoritmo sozinho, apenas dei uma sacudidela em alguns parâmetros).


Se você mesmo tivesse construído a floresta em C++ você teria adivinhado fazer "extrapolação" ala MLP, mas em R... Boa sorte...


Eu não conheço nenhum Minsky e Pozharsky e não entendo o que está em seus gráficos ) você precisa ensinar RF alguns com metas de 0 a 10 ou até 100 e depois dar uma resposta, que obviamente deve ser mais de 100 e RF deve dar apenas 100

aqui o autor tem no artigo:

#  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.")

Não entendo r bem, só entendo que de 100 a 150 RF deveriam ter previsto resultados adequados como outros modelos, mas isso não aconteceu


 
Alyosha:

Não devia. Ele dará uma interpolação local dos pontos mais próximos, como Knn (classificador quasi-optimizado), mas mais grosseiro. Você simplesmente não sabe como girar as bases nas árvores de RF e parece "cortado em cubos".


Bem, no post anterior eu adicionei um código com um screenshot, o que está "errado" lá?

 
Aliosha:

No algoritmo florestal, as árvores dividem pontos ortogonalmente, se você girar a base, você obtém o mesmo que no MLP, para isso você precisa entrar no código da floresta e corrigir ou escrever sua própria floresta))))


Desculpa, isso seria um tipo diferente de floresta. Referia-me à versão clássica.

Estou a tentar perceber o que está lá, a escrever algo...

o resultado é que o rf clássico não sabe como extrapolar

 
Aliosha:

No ML não há "clássicos", há algo que funciona e resolve o problema. Dominar os algoritmos de outra pessoa em toda a sua diversidade é tão sensato como compreender o código de todos os indicadores no Codobase and Market, o que não é razoável...

Não há muitas heurísticas básicas no ML, que você terá que dominar sozinho, manualmente, para que "ele role dos seus dedos", que você acorde à noite e apenas do tipo de memória em C++ gradiente quebrando por meia hora (brincadeira), não é tão difícil quanto parece, e então você pode gerar 100500 variações de algoritmos a partir de artigos de hobber por conta própria.


Ohoho...

O Dr. Trader repetiu duas vezes, eu também vou repetir para você, a terceira vez que eles dizem que Deus e os impuros querem ouvir três vezes, isso significa algo, num contexto místico...

Novos pontos no ESPAÇO PRINCÍPIO, em relação ao tempo físico não estão LOCALIZADOS ESTRITAMENTE FORA DO PONTOS, tempo é tempo, nas suas características as suas são características, bem não relacionadas linearmente com o tempo físico com, por exemplo, um momento ou um espectro. Os pontos "extrapolados" estarão em qualquer lugar dentro e fora do seu espaço de recursos.


Eu não disse isso, apenas disse que a estrutura do antigo é tal, que se eles são ramificados por todos os valores de treinamento dos alvos, então o modelo vai produzir estritamente aquilo para o qual é ramificado, e nenhum novo valor pode produzir... pelo menos é isso que diz no artigo com o exemplo. Vou fazer os meus exemplos e mostrar-vos o que tenho :) Se você estava no limite do valor-alvo de 100 em treinamento, a saída não pode dar mais de 100 ... Como todos os valores acima de 100 irá para a folha 100, é puramente fisicamente não tem folhas com valores superiores a 100.

 
Maxim Dmitrievsky:

Se o valor limite do alvo foi 100 durante o treinamento, ele não pode produzir mais de 100... porque todos os valores acima de 100 irão para a folha 100.

A normalização não é inventada para nada.
 
Yuriy Asaulenko:
A normalização é inventada por uma razão.

é compreensível, a questão de princípio é sobre o funcionamento das árvores. Não importa como você o normalize, qualquer outlier em novos dados a árvore não extrapolará, mas dará o valor extremo que ela conhece. É por isso que não é necessário normalizar os dados para as árvores.

 
Maxim Dmitrievsky:

é compreensível, a questão de princípio é sobre o funcionamento das árvores. Não importa como você o normalize, qualquer outlier em novos dados a árvore não extrapolará, mas dará o valor extremo que ela conhece. É por isso que não é necessário normalizar os dados para as árvores.

Ainda não vejo a necessidade de RF para mim, mas para o MLP eu não só normalizo, mas também passo o sinal de entrada através de um sigmóide - ou seja, o alcance dinâmico das entradas é limitado e os outliers não importam.
 
Maxim Dmitrievsky:

é compreensível, a questão de princípio é sobre o funcionamento das árvores. Não importa como você o normalize, qualquer outlier em novos dados a árvore não extrapolará, mas dará o valor extremo que ela conhece. É por isso que não é necessário normalizar os dados para as árvores.

Eu acho que a solução neste caso é simples - use o feedback.

Com todo o respeito.

 
Andrey Kisselyov:

Eu acho que a solução neste caso é simples, introduza feedback.

Com todo o respeito.


Eu tenho um :) Não me importa se não pode extrapolar ou se pode... o modelo irá prever num conjunto conhecido... apenas para a educação geral

existem alguns erros na lib com erros de modelo, quanto menor o set menor o erro, eu ainda não entendo o rpicol