Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 497

 
Dr. Trader:

Pero, ¿por qué crees que si el modelo lineal extrapola usando la fórmula y=ax+b, lo hace perfectamente, pero si el bosque lo hace usando el vecino conocido más cercano, no hace nada? Ambos algoritmos tienen derecho a existir.


No estoy contando nada, te he mostrado un ejemplo y un montón de artículos. Qué más da que el LR lo haga perfectamente o no. La cuestión es que la RF no puede extrapolar nada, constructivamente, nunca y bajo ninguna circunstancia, mientras que la LR se da por comparación y claridad.

Eso es lo que pido y sólo pedí ejemplos de ENTENDIMIENTO de por qué crees que está mal :)

 
Aliosha:



¿Qué tiene eso que ver con los "artículos"? ¿Me estás tomando el pelo? Te he puesto el ejemplo de Minsky, que es como Newton sólo que en ML y la cagó de lo lindo, y tú hablas de chorradas en hubra o de scripts en R (léase: no he construido yo el algoritmo, sólo he tirado de algunos parámetros).


Si hubieras construido el bosque tú mismo en C++ habrías adivinado que hay que hacer "extrapolación" ala MLP, pero en R... Buena suerte...


No conozco a ningún Minsky y Pozharsky y no entiendo lo que hay en tus gráficos ) tienes que enseñar a RF algún conjunto con objetivos de 0 a 10 o hasta 100 y luego dar una respuesta, que debe superar deliberadamente 100 y RF debe dar sólo 100

aquí el autor tiene en el artículo:

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

No entiendo bien r, sólo entiendo que de 100 a 150 RF debería haber predicho resultados adecuados como otros modelos, pero esto no ocurrió


 
Alyosha:

No debería. Dará una interpolación local de los puntos más cercanos, como Knn (clasificador cuasi-óptimo), pero más tosca. Simplemente no sabes cómo rotar las bases en los árboles de RF y aparece "en cubos".


Bueno en el post anterior añadí un código con una captura de pantalla, ¿qué es lo que "falla" ahí?

 
Aliosha:

En el algoritmo del bosque, los árboles dividen los puntos ortogonalmente, si rotas la base, obtienes lo mismo que en MLP, para esto necesitas meterte en el código del bosque y corregir o escribir tu propio bosque))


Lo siento, eso sería otro tipo de bosque. Me refería a la versión clásica.

Estoy tratando de entender lo que hay, para escribir algo...

el resultado es que la rf clásica no sabe extrapolar

 
Aliosha:

En ML no hay "clásicos", hay algo que funciona y resuelve el problema. Dominar los algoritmos ajenos en toda su diversidad es tan sensato como entender el código de todos los indicadores de Codobase y Market, lo cual no es razonable...

No hay demasiadas heurísticas básicas en ML, que tendrás que dominar por ti mismo, manualmente, para que "te ruede por los dedos", que te despiertes por la noche y sólo de memoria escribas en C++ gradient busting durante media hora (es broma), no es tan difícil como parece, y luego puedes generar 100500 variaciones de algoritmos de artículos de hobber por ti mismo.


Ohoho...

ElDr. Trader lo repitió dos veces, yo también te lo repetiré, la tercera vez que dicen Dios y los impuros quieren escuchar tres veces, significa algo, en un contexto místico...

Los nuevos puntos en el ESPACIO PRINCIPAL, en relación con el tiempo físico NO SE UBICAN ESTRICTAMENTE FUERA DEL SUELO DE LOS PUNTOS, el tiempo es el tiempo, en sus rasgos sus son rasgos, bien no conectado el tiempo físico linealmente con por ejemplo un impulso o un espectro. Los puntos "extrapolados" estarán en cualquier lugar dentro y fuera de su espacio de características.


No he dicho eso, sólo he dicho que la estructura de los antiguos es tal, que si se ramifican por todos los valores de entrenamiento de los objetivos, entonces el modelo saldrá estrictamente por lo que se ramifica, y no puede salir ningún valor nuevo... al menos eso es lo que dice el artículo con el ejemplo. Haré mis ejemplos y te mostraré lo que tengo :) Si usted estuviera en el límite del valor objetivo de 100 en el entrenamiento, la salida que no puede dar más de 100 ... Debido a que todos los valores por encima de 100 irá a la hoja de 100, es puramente físicamente no tiene hojas con valores superiores a 100.

 
Maxim Dmitrievsky:

Si el valor límite del objetivo era 100 durante el entrenamiento, no puede emitir más de 100... porque todos los valores por encima de 100 irán a la hoja 100.

La normalización se inventó por una razón.
 
Yuriy Asaulenko:
La normalización se inventó por una razón.

es comprensible, la cuestión de principio es sobre el funcionamiento de los árboles. No importa cómo lo normalices, cualquier valor atípico en los nuevos datos el árbol no lo extrapolará, sino que dará el valor extremo que conoce. Por eso no es necesario normalizar los datos de los árboles.

 
Maxim Dmitrievsky:

es comprensible, la cuestión de principio es sobre el funcionamiento de los árboles. No importa cómo lo normalices, cualquier valor atípico en los nuevos datos el árbol no lo extrapolará, sino que dará el valor extremo que conoce. Por eso no es necesario normalizar los datos de los árboles en absoluto.

Todavía no veo la necesidad de RF para mí, pero para la MLP no sólo normalizo, sino que también paso la señal de entrada a través de una sigmoide, es decir, el rango dinámico de las entradas es limitado y los valores atípicos no importan.
 
Maxim Dmitrievsky:

es comprensible, la cuestión de principio es sobre el funcionamiento de los árboles. No importa cómo lo normalices, cualquier valor atípico en los nuevos datos el árbol no lo extrapolará, sino que dará el valor extremo que conoce. Por eso no es necesario normalizar los datos de los árboles en absoluto.

Creo que la solución en este caso es sencilla: utilizar la retroalimentación.

Respetuosamente.

 
Andrey Kisselyov:

Creo que la solución en este caso es sencilla, introducir la retroalimentación.

Respetuosamente.


Yo tengo uno :) No me importa si no puede extrapolar o si puede... el modelo predecirá sobre un conjunto conocido... sólo por educación general

hay algunos errores en la lib con los errores del modelo, cuanto más pequeño es el conjunto más pequeño es el error, no entiendo rpicol todavía