L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 497

 
Dr. Trader:

Mais pourquoi pensez-vous que si le modèle linéaire extrapole en utilisant la formule y=ax+b, il le fait parfaitement, mais que si la forêt le fait en utilisant le plus proche voisin connu, elle ne fait rien ? Ces deux algorithmes ont le droit d'exister.


Je ne compte rien, je vous ai montré un exemple et un tas d'articles. Quelle différence cela fait-il que le LR le fasse parfaitement ou non ? Le fait est que RF ne peut en aucun cas extrapoler, de manière constructive, jamais et en aucune circonstance, alors que LR est donné à titre de comparaison et de clarté.

C'est ce que je demande et je n'ai demandé que des exemples COMPRENANT pourquoi vous pensez que c'est mal :)

 
Aliosha:



Qu'est-ce que ça a à voir avec les "articles" ? Tu te moques de moi ? Je t'ai donné l'exemple de Minsky, qui est comme Newton seulement en ML et qui s'est tellement planté, et tu parles de bêtises sur Habra ou de scripts en R (lire : je n'ai pas construit l'algorithme moi-même, j'ai juste branché quelques paramètres).


Si vous aviez construit la forêt vous-même en C++, vous auriez deviné qu'il fallait faire une "extrapolation" à la manière de MLP, mais en R... Bon vent...


Je ne connais pas de Minsky et de Pozharsky et je ne comprends pas ce qu'il y a sur vos graphiques). Vous devez enseigner à RF un jeu avec des objectifs de 0 à 10 ou jusqu'à 100 et ensuite donner une réponse, qui devrait évidemment être supérieure à 100 et RF ne devrait donner que 100.

ici l'auteur a dans l'article :

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

Je ne comprends pas bien r, je comprends seulement que de 100 à 150 RF aurait dû prédire des résultats adéquats comme d'autres modèles, mais cela ne s'est pas produit


 
Alyosha:

Ça ne devrait pas. Il donnera une interpolation locale des points les plus proches, comme Knn (classificateur quasi-optimal) mais plus grossière. Vous ne savez pas comment faire tourner les bases dans les arbres RF et cela apparaît "en dés".


Dans le message précédent, j'ai ajouté un code avec une capture d'écran, qu'est-ce qui ne va pas ?

 
Aliosha:

Dans l'algorithme de la forêt, les arbres divisent les points par une caractéristique orthogonale, si vous faites tourner la base, vous obtenez la même chose que dans le MLP, pour cela vous devez entrer dans le code de la forêt et corriger ou écrire votre propre forêt))))


Je suis désolé, ce serait un autre type de forêt. Je voulais dire la version classique.

J'essaie de m'attaquer à ce qu'il y a là, d'écrire quelque chose...

le résultat est que la rf classique ne sait pas extrapoler

 
Aliosha:

En ML, il n'y a pas de "classiques", il y a quelque chose qui fonctionne et qui résout le problème. Maîtriser les algorithmes de quelqu'un d'autre dans toute leur diversité est aussi raisonnable que de comprendre le code de tous les indicateurs de la kodobase et du marché, ce qui n'est pas raisonnable....

Il n'y a pas beaucoup d'heuristiques de base dans ML, que vous devrez maîtriser par vous-même, manuellement, pour que "ça vous roule sur les doigts", que vous vous réveilliez la nuit et que vous tapiez de mémoire en C++ gradient busting pendant une demi-heure (je plaisante), ce n'est pas aussi difficile que ça en a l'air, et ensuite vous pouvez générer 100500 variations d'algorithmes à partir d'articles de hobber par vous-même.


Ohoho...

LeDr Trader l'a répété deux fois, je vous le répète aussi, la troisième fois, on dit Dieu et l'impur veut entendre trois fois, ça veut dire quelque chose, dans un contexte mystique...

Les nouveaux points dans l'ESPACE PRINCIPAL, par rapport au temps physique ne sont PAS SITUÉS STRICTEMENT EN DEHORS DU PLANCHER DES POINTS, le temps est le temps, dans les puces vos sont des puces, bien non lié au temps physique linéairement avec par exemple l'élan ou le spectre. Les points "extrapolés" seront situés n'importe où à l'intérieur et à l'extérieur de votre espace caractéristique.


Je n'ai pas dit ça, j'ai juste dit que la structure des anciens est telle, que s'ils sont ramifiés par toutes les valeurs d'entraînement des cibles, alors le modèle produira strictement ce à quoi il est ramifié, et aucune nouvelle valeur qu'il puisse produire... du moins c'est ce qui est dit dans l'article avec l'exemple. Je vais faire mes exemples et vous montrer ce que j'ai :) Si vous étiez à la limite de la valeur cible de 100 dans la formation, la sortie qu'il ne peut pas donner plus de 100 ... Parce que toutes les valeurs supérieures à 100 ira dans la feuille 100, il est purement physiquement n'a pas de feuilles avec des valeurs supérieures à 100.

 
Maxim Dmitrievsky:

Si la valeur limite de la cible était 100 pendant la formation, elle ne peut pas sortir plus de 100... car toutes les valeurs supérieures à 100 iront dans la feuille 100.

La normalisation a été inventée pour une raison.
 
Yuriy Asaulenko:
La normalisation est inventée pour une raison.

est compréhensible, la question de principe porte sur le fonctionnement des arbres. Quelle que soit la façon dont vous le normalisez, toute valeur aberrante sur les nouvelles données, l'arbre ne l'extrapolera pas, mais donnera la valeur extrême qu'il connaît. C'est pourquoi il n'est pas nécessaire de normaliser les données pour les arbres.

 
Maxim Dmitrievsky:

est compréhensible, la question de principe porte sur le fonctionnement des arbres. Quelle que soit la façon dont vous le normalisez, toute valeur aberrante sur de nouvelles données, l'arbre ne l'extrapolera pas, mais donnera la valeur extrême qu'il connaît. C'est pourquoi il n'est pas du tout nécessaire de normaliser les données pour les arbres.

Je ne vois pas encore la nécessité de la RF pour moi, mais pour MLP, non seulement je normalise, mais je fais passer le signal d'entrée par une sigmoïde - c'est-à-dire que la gamme dynamique des entrées est limitée et que les valeurs aberrantes n'ont pas d'importance.
 
Maxim Dmitrievsky:

est compréhensible, la question de principe porte sur le fonctionnement des arbres. Quelle que soit la façon dont vous le normalisez, toute valeur aberrante sur de nouvelles données, l'arbre ne l'extrapolera pas, mais donnera la valeur extrême qu'il connaît. C'est pourquoi il n'est pas du tout nécessaire de normaliser les données pour les arbres.

Je pense que la solution dans ce cas est simple - utiliser le feedback.

Respectueusement.

 
Andrey Kisselyov:

Je pense que la solution dans ce cas est simple, introduire le feedback.

Respectueusement.


J'en ai un :) Je me fiche qu'il ne puisse pas extrapoler ou qu'il le puisse... le modèle prédit sur un ensemble connu... juste pour la formation générale.

il y a quelques erreurs dans la librairie avec des erreurs de modèle, plus l'ensemble est petit, plus l'erreur est petite, je ne comprends pas encore rpicol