Forêts aléatoires dans R | DataScience +
L’apprentissage d’ensemble est un type de technique d’apprentissage supervisé dans lequel l’idée de base est de générer plusieurs modèles sur un ensemble de données d’entraînement, puis de simplement combiner (en moyenne) leurs règles de sortie ou leur hypothèse (H_x ) pour générer un modèle fort qui fonctionne très bien et ne surpasse pas et qui équilibre également le compromis biais-variance.
L’idée est qu’au lieu de produire un seul modèle compliqué et complexe qui pourrait avoir une variance élevée qui conduirait à un surajustement ou pourrait être trop simple et avoir un biais élevé conduisant à un sous-ajustement, nous générerons de nombreux modèles en nous entraînant sur l’ensemble d’entraînement. et à la fin, combinez-les. Une telle technique est Random Forest qui est une technique populaire d’assemblage utilisée pour améliorer les performances prédictives des arbres de décision en réduisant la variance dans les arbres en les faisant la moyenne. Les arbres de décision sont considérés comme des techniques de modélisation très simples et facilement interprétables ainsi que compréhensibles, mais un inconvénient majeur en eux est qu’ils ont une mauvaise performance prédictive et une faible généralisation sur l’ensemble de test. Ils sont également appelés apprenants faibles, qui sont des apprenants qui réussissent toujours mieux que le hasard et qui ont une erreur inférieure à 50%.
Forêts aléatoires
Les forêts aléatoires sont similaires à une technique d’Ensemble célèbre appelée Bagging, mais ont une modification différente. Dans Random Forests, l’idée est de décorréler les différents arbres générés par les différents échantillons bootstrap à partir des données d’apprentissage. Et puis nous réduisons simplement la variance dans les arbres en les faisant la moyenne.
La moyenne des arbres nous aide à réduire la variance et également à améliorer les performances des arbres de décision sur l’ensemble de test et à éviter éventuellement le surajustement.
L’idée est de construire beaucoup d’arbres de manière à réduire la corrélation entre les arbres.
Une autre différence majeure est que nous ne considérons qu’un sous-ensemble aléatoire de prédicteurs (m ) chaque fois que nous faisons une division sur des exemples d’entraînement. Alors que généralement dans les arbres, nous trouvons tous les prédicteurs tout en faisant une division et choisissons les meilleurs parmi eux. Typiquement (m = sqrt {p} ) où (p ) est le nombre de prédicteurs.
Maintenant, il semble fou de jeter beaucoup de prédicteurs, mais cela a du sens car cela a pour effet que chaque arbre utilise différents prédicteurs pour diviser les données à différents moments. Cela signifie que 2 arbres générés sur les mêmes données d’apprentissage auront des variables différentes au hasard sélectionnées à chaque division, c’est ainsi que les arbres seront décorrélés et seront indépendants les uns des autres. Une autre grande chose à propos des forêts aléatoires et de l’ensachage est que nous pouvons continuer à ajouter de plus en plus de gros arbres touffus et cela ne nous fera pas de mal parce qu’à la fin, nous allons simplement les faire la moyenne, ce qui réduira la variance par le facteur du nombre d’arbres (T ) lui-même.
Donc, en faisant cette astuce de jeter les prédicteurs, nous avons décorrélé les arbres et la moyenne qui en résulte semble un peu meilleure.
Implémentation en R
chargement des packages requis
require(randomForest) require(MASS)#Package which contains the Boston housing dataset attach(Boston) set.seed(101) dim(Boston) ## [1] 506 14
Ensembles de formation et de test Saperating
#training Sample with 300 observations train=sample(1:nrow(Boston),300) ?Boston #to search on the dataset
Nous allons utiliser la variable «medv» comme variable de réponse, qui est la valeur médiane du logement. Nous adapterons 500 arbres.
Ajustement de la forêt aléatoire
Nous utiliserons tous les prédicteurs de l’ensemble de données.
Boston.rf=randomForest(medv ~ . , data = Boston , subset = train) Boston.rf ## ## Call: ## randomForest(formula = medv ~ ., data = Boston, subset = train) ## Type of random forest: regression ## Number of trees: 500 ## No. of variables tried at each split: 4 ## ## Mean of squared residuals: 12.62686 ## % Var explained: 84.74
L’erreur quadratique moyenne et la variance expliquées ci-dessus sont calculées en utilisant Erreur de sortie du sac Estimation.Dans ce ( frac23 ) de formation, les données sont utilisées pour l’entraînement et le ( frac13 ) restant est utilisé pour valider les arbres. De plus, le nombre de variables sélectionnées au hasard à chaque division est de 4.
Tracer le graphique d’erreur par rapport au nombre d’arbres.
plot(Boston.rf)
Ce graphique montre l’erreur et le nombre d’arbres. Nous pouvons facilement remarquer que l’erreur diminue alors que nous continuons à ajouter de plus en plus d’arbres et à les faire la moyenne.
Nous pouvons maintenant comparer les erreurs d’échantillonnage hors sac et l’erreur sur l’ensemble de test
Le modèle de forêt aléatoire ci-dessus a choisi au hasard 4 variables à prendre en compte à chaque division. Nous pourrions maintenant essayer tous les 13 prédicteurs possibles qui peuvent être trouvés à chaque division.
oob.err=double(13) test.err=double(13) #mtry is no of Variables randomly chosen at each split for(mtry in 1:13) { rf=randomForest(medv ~ . , data = Boston , subset = train,mtry=mtry,ntree=400) oob.err[mtry] = rf$mse[400] #Error of all Trees fitted pred<-predict(rf,Boston[-train,]) #Predictions on Test Set for each Tree test.err[mtry]= with(Boston[-train,], mean( (medv - pred)^2)) #Mean Squared Test Error cat(mtry," ") #printing the output to the console } ## 1 2 3 4 5 6 7 8 9 10 11 12 13
Erreur de test
test.err ## [1] 26.06433 17.70018 16.51951 14.94621 14.51686 14.64315 14.60834 ## [8] 15.12250 14.42441 14.53687 14.89362 14.86470 15.09553
Estimation des erreurs hors sac
oob.err ## [1] 19.95114 13.34894 13.27162 12.44081 12.75080 12.96327 13.54794 ## [8] 13.68273 14.16359 14.52294 14.41576 14.69038 14.72979
Ce qui se passe, c’est que nous cultivons 400 arbres 13 fois, c’est-à-dire pour les 13 prédicteurs.
Tracer à la fois l’erreur de test et l’erreur hors sac
matplot(1:mtry , cbind(oob.err,test.err), pch=19 , col=c("red","blue"),type="b",ylab="Mean Squared Error",xlab="Number of Predictors Considered at each Split") legend("topright",legend=c("Out of Bag Error","Test Error"),pch=19, col=c("red","blue"))
Maintenant, ce que nous observons, c’est que la ligne rouge correspond aux estimations d’erreur hors sac et la ligne bleue est l’erreur calculée sur l’ensemble de test. Les deux courbes sont assez lisses et les estimations d’erreur sont également quelque peu corrélées. L’erreur a tendance à être minimisée à environ (mtry = 4 ).
Dans l’extrême droite du graphique ci-dessus, nous avons considéré les 13 prédicteurs possibles à chaque fractionnement, qui n’est que l’ensachage.
Conclusion
Maintenant, dans cet article, j’ai donné un aperçu simple des forêts aléatoires et en quoi elles diffèrent des autres techniques d’apprentissage d’ensemble et j’ai également appris comment implémenter une technique de modélisation aussi complexe et forte dans R avec un package simple. randomForest
. Les forêts aléatoires sont une technique très intéressante pour adapter un modèle plus précis en faisant la moyenne de nombreux arbres de décision et en réduisant la variance et en évitant le problème de surajustement dans les arbres. Les arbres de décision eux-mêmes sont peu performants, mais lorsqu’ils sont utilisés avec des techniques d’assemblage comme l’ensachage, les forêts aléatoires, etc., leur performance prédictive est beaucoup améliorée. Maintenant, évidemment, il existe divers autres packages dans R qui peuvent être utilisés pour implémenter Random Forests.
J’espère que le didacticiel sera suffisant pour vous aider à mettre en œuvre Random Forests dans R ou au moins comprendre l’idée de base derrière le fonctionnement de cette incroyable technique. De plus, je suggère l’un de mes cours préférés en modélisation arborescente nommé Apprentissage d’ensemble et modélisation basée sur les arbres en R de DataCamp.
Merci d’avoir lu l’article et assurez-vous de l’aimer et de le partager.