Ceci est en partie une réponse à @Sashikanth Dareddy (car cela ne rentrera pas dans un commentaire) et en partie à une réponse au message original.
Rappelez-vous ce qu'est un intervalle de prédiction, c'est un intervalle ou un ensemble de valeurs où nous prédisons que les observations futures se trouveront. Généralement, l’intervalle de prédiction comprend 2 éléments principaux qui déterminent sa largeur, l’un représentant l’incertitude concernant la moyenne prédite (ou tout autre paramètre), l’intervalle de confiance, et l’autre représentant la variabilité des observations individuelles autour de cette moyenne. L’intervalle de confiance est assez robuste du fait du théorème de la limite centrale et, dans le cas d’une forêt aléatoire, l’amorçage aide également. Mais l'intervalle de prédiction dépend entièrement des hypothèses sur la répartition des données en fonction des variables de prédicteur. Le CLT et l'amorçage n'ont aucun effet sur cette partie.
L'intervalle de prédiction doit être plus large, l'intervalle de confiance correspondant étant également plus large. Les hypothèses sur une variance égale ou non qui affectent la largeur de l'intervalle de prévision sont également liées à la connaissance du chercheur, et non au modèle de forêt aléatoire.
Un intervalle de prédiction n'a pas de sens pour un résultat catégorique (vous pouvez faire un ensemble de prédiction plutôt qu'un intervalle, mais la plupart du temps, ce ne serait probablement pas très informatif).
Nous pouvons voir certains des problèmes liés aux intervalles de prédiction en simulant des données pour lesquelles nous connaissons la vérité exacte. Considérez les données suivantes:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
Ces données particulières suivent les hypothèses pour une régression linéaire et sont assez simples pour un ajustement aléatoire de forêt. Nous savons d'après le modèle "vrai" que, lorsque les deux prédicteurs valent 0, que la moyenne est égale à 10, nous savons également que les points individuels suivent une distribution normale avec un écart-type de 1. Cela signifie que l'intervalle de prédiction de 95% basé sur une connaissance parfaite pour ces points seraient de 8 à 12 (bien en fait de 8,04 à 11,96, mais l’arrondi le rend plus simple). Tout intervalle de prédiction estimé doit être plus large que prévu (ne pas disposer d'informations parfaites ajoute de la largeur à compenser) et inclure cette plage.
Regardons les intervalles de régression:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
Nous pouvons constater qu'il existe une certaine incertitude dans les moyennes estimées (intervalle de confiance), ce qui nous donne un intervalle de prédiction plus large (mais comprenant) la plage de 8 à 12.
Examinons maintenant l'intervalle basé sur les prévisions individuelles d'arbres individuels (nous devrions nous attendre à ce qu'elles soient plus larges, car la forêt aléatoire ne bénéficie pas des hypothèses (que nous savons être vraies pour ces données) comme le fait la régression linéaire):
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
Les intervalles sont plus larges que les intervalles de prédiction de régression, mais ils ne couvrent pas toute la plage. Ils incluent les vraies valeurs et peuvent donc être légitimes en tant qu'intervalles de confiance, mais ils ne font que prédire où se trouve la moyenne (valeur prédite) sans l'élément supplémentaire pour la distribution autour de cette moyenne. Pour le premier cas où x1 et x2 sont tous deux égaux à 0, les intervalles ne descendent pas au-dessous de 9,7, ce qui est très différent de l'intervalle de prédiction véritable qui descend à 8. Si nous générons de nouveaux points de données, il y aura plusieurs points (beaucoup plus moins de 5%) qui se trouvent dans les intervalles vrais et de régression, mais ne tombent pas dans les intervalles aléatoires de forêt.
Pour générer un intervalle de prédiction, vous devez émettre de fortes hypothèses sur la répartition des points individuels autour des moyennes prédites. Vous pouvez ensuite prendre les prédictions des arbres individuels (l’intervalle de confiance initialisé), puis générer une valeur aléatoire à partir de la valeur supposée. distribution avec ce centre. Les quantiles de ces pièces générées peuvent constituer l'intervalle de prédiction (mais je le testerais quand même, vous devrez peut-être répéter le processus plusieurs fois et combiner).
Voici un exemple de cela en ajoutant des écarts normaux (puisque nous savons que les données d'origine utilisaient un comportement normal) aux prévisions avec l'écart type basé sur la MSE estimée à partir de cet arbre:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
Ces intervalles contiennent ceux qui sont basés sur une connaissance parfaite. Mais ils dépendront grandement des hypothèses retenues (les hypothèses sont valables ici car nous avons utilisé la connaissance de la manière dont les données ont été simulées, elles risquent de ne pas être aussi valables dans les cas réels). Je voudrais encore répéter les simulations plusieurs fois pour des données qui ressemblent davantage à vos données réelles (mais simulées afin que vous sachiez la vérité) plusieurs fois avant de faire pleinement confiance à cette méthode.
score
fonction permettant d’évaluer les performances. Étant donné que le résultat est basé sur le vote majoritaire des arbres de la forêt, en cas de classification, il vous donnera une probabilité que ce résultat soit vrai, sur la base de la distribution des votes. Je ne suis toutefois pas sûr de la régression ... Quelle bibliothèque utilisez-vous?