L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 497

 
Ildottor Trader:

Ma perché pensi che se il modello lineare estrapola usando la formula y=ax+b, lo fa perfettamente, ma se la foresta lo fa usando il vicino conosciuto più vicino, non fa nulla? Entrambi questi algoritmi hanno il diritto di esistere.


Non sto contando nulla, ti ho mostrato un esempio e un mucchio di articoli. Che differenza fa se l'LR lo fa perfettamente o no. Il punto è che RF non può estrapolare affatto, in modo costruttivo, mai e in nessun caso, mentre LR è dato per confronto e chiarezza.

È quello che sto chiedendo e ho chiesto solo esempi di comprensione del perché pensi che sia sbagliato :)

 
Aliosha:



Cosa c'entra questo con gli "articoli"? Mi stai prendendo in giro? Ti ho fatto l'esempio di Minsky, che è come Newton solo in ML e ha sbagliato di brutto, e tu parli di porcherie su Habra o di script in R (leggi: non ho costruito io l'algoritmo, ho solo sballottato qualche parametro).


Se tu avessi costruito la foresta da solo in C++ avresti indovinato di fare "estrapolazione" ala MLP, ma in R... Buona fortuna...


Non conosco nessun Minsky e Pozharsky e non capisco cosa c'è nei tuoi grafici ) devi insegnare a RF qualche set con obiettivi da 0 a 10 o fino a 100 e poi dare una risposta, che ovviamente dovrebbe essere superiore a 100 e RF dovrebbe dare solo 100

qui l'autore ha nell'articolo:

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

Non capisco bene r, capisco solo che da 100 a 150 RF avrebbe dovuto prevedere risultati adeguati come altri modelli, ma questo non è successo


 
Alyosha:

Non dovrebbe. Darà un'interpolazione locale dei punti più vicini, come Knn (classificatore quasi-ottimale) ma più grezzo. Semplicemente non sai come ruotare le basi negli alberi RF e appare "tagliato a dadini".


Bene, nel post precedente ho aggiunto un codice con uno screenshot, cosa c'è di "sbagliato" lì?

 
Aliosha:

Nell'algoritmo della foresta, gli alberi dividono i punti per una caratteristica ortogonalmente, se si ruota la base, si ottiene lo stesso come in MLP, per questo bisogna entrare nel codice della foresta e correggere o scrivere la propria foresta)))


Mi dispiace, sarebbe un altro tipo di foresta, intendevo la versione classica.

Sto cercando di capire cosa c'è, di scrivere qualcosa...

il risultato è che l'rf classico non sa come estrapolare

 
Aliosha:

In ML non ci sono "classici", c'è qualcosa che funziona e risolve il problema. Padroneggiare gli algoritmi di qualcun altro in tutta la loro diversità è tanto sensato quanto capire il codice di tutti gli indicatori di kodobase e del mercato, il che non è ragionevole...

Non ci sono troppe euristiche di base in ML, che dovrai padroneggiare da solo, manualmente, in modo che "ti rotoli dalle dita", che ti svegli di notte e solo a memoria digiti in C++ gradient busting per mezz'ora (scherzo), non è così difficile come sembra, e poi puoi generare da solo 100500 varianti di algoritmi da articoli hobbistici.


Ohoho...

IlDr. Trader l'ha ripetuto due volte, lo ripeterò anche a voi, la terza volta, si dice Dio e l'impuro vuole sentire tre volte, significa qualcosa, in un contesto mistico...

I nuovi punti nello SPAZIO PRINCIPALE, in relazione al tempo fisico NON SONO LOCALIZZATI STRETTAMENTE FUORI DAL PIANO DEI PUNTI, il tempo è il tempo, nei chip i vostri sono chip, ben non correlati il tempo fisico linearmente con per esempio la quantità di moto o lo spettro. I punti "estrapolati" saranno ovunque all'interno e all'esterno del vostro spazio delle caratteristiche.


Non ho detto questo, ho solo detto che la struttura degli antichi è tale, che se sono ramificati da tutti i valori di allenamento dei bersagli, allora il modello emetterà rigorosamente ciò a cui è ramificato, e nessun nuovo valore può emettere... almeno questo è ciò che dice l'articolo con l'esempio. Farò i miei esempi e vi mostrerò quello che ho :) Se tu fossi al limite del valore target di 100 nella formazione, l'uscita non può dare più di 100 ... Perché tutti i valori superiori a 100 andrà nel foglio 100, è puramente fisicamente non ha fogli con valori maggiori di 100.

 
Maxim Dmitrievsky:

Se il valore limite dell'obiettivo era 100 durante l'allenamento, non può emettere più di 100... perché tutti i valori superiori a 100 andranno nel foglio 100.

La normalizzazione non è stata inventata per niente.
 
Yuriy Asaulenko:
La normalizzazione è inventata per un motivo.

è comprensibile, la questione di principio riguarda il funzionamento degli alberi. Non importa come lo normalizzi, qualsiasi outlier sui nuovi dati l'albero non estrapolerà, ma darà il valore estremo che conosce. Ecco perché non è necessario normalizzare i dati per gli alberi.

 
Maxim Dmitrievsky:

è comprensibile, la questione di principio riguarda il funzionamento degli alberi. Non importa come lo normalizzi, qualsiasi outlier sui nuovi dati l'albero non estrapolerà, ma darà il valore estremo che conosce. Ecco perché non è affatto necessario normalizzare i dati per gli alberi.

Non vedo ancora la necessità di RF per me, ma per MLP non solo normalizzo, ma passo anche il segnale di ingresso attraverso una sigmoide - cioè la gamma dinamica degli ingressi è limitata e gli outlier non hanno importanza.
 
Maxim Dmitrievsky:

è comprensibile, la questione di principio riguarda il funzionamento degli alberi. Non importa come lo normalizzi, qualsiasi outlier sui nuovi dati l'albero non estrapolerà, ma darà il valore estremo che conosce. Ecco perché non è affatto necessario normalizzare i dati per gli alberi.

Penso che la soluzione in questo caso sia semplice: usare il feedback.

Con rispetto.

 
Andrey Kisselyov:

Penso che la soluzione in questo caso sia semplice, introdurre il feedback.

Con rispetto.


Ne ho uno :) non mi interessa se non può estrapolare o se può... il modello predirà su un set conosciuto... solo per educazione generale

ci sono alcuni errori in lib con errori di modello, più piccolo è il set più piccolo è l'errore, non capisco ancora rpicol