Suite

Comment généraliser les données d'apprentissage pour un classificateur de forêt aléatoire ?

Comment généraliser les données d'apprentissage pour un classificateur de forêt aléatoire ?


Je travaille avec un classificateur de forêt aléatoire dans eCognition (nouveau avec eCognition 9.0). L'image montre 8 tuiles NAIP que j'essaie de classer en utilisant environ 100 points de formation. Les données d'apprentissage (points bleus) sont très simples et sont constituées d'un fichier de formes indiquant l'emplacement et la classe de végétation. Je classe les images tuile par tuile, donc je cherche un moyen d'utiliser toutes les données d'apprentissage plutôt que seulement les points qui se trouvent dans l'étendue d'une tuile individuelle.

Quelles méthodes sont disponibles pour utiliser la gamme complète des données d'entraînement sur une base de tuile par tuile ? J'ai envisagé d'extraire les valeurs de pixels pour chaque point et de les exporter sous forme de tableau, bien que je n'aie pas trouvé de moyen d'utiliser des données tabulaires pour entraîner le classificateur de forêt aléatoire dans eCognition.


Pourquoi conserver l'intégralité de l'analyse dans eCognition ? Une fois que vous avez dérivé vos objets image, exportez-les et exécutez le modèle dans R. Vous avez beaucoup plus de contrôle sur le modèle dans R (par exemple, spécification du modèle, test de multi-colinéarité, sélection de modèle, etc.) et il n'y a aucun problème d'ajustement. un modèle à toutes les données et le prédire aux sous-ensembles représentés par les tuiles.

Je créerais un workflow où :

1) les objets image sont créés et résumés dans eCognition.

2) exporter les résultats sous forme de polygones ou de rasters d'objets d'image représentant des statistiques spectrales/texturales d'objets d'image.

3) lire les données d'apprentissage de point et les objets image, en tant que polygone SpatialPolygonsDataFrame ou objet de pile raster, dans R.

4) attribuer des statistiques d'objet image aux points d'apprentissage. En raison de l'ampleur du problème, les étapes 3 et 4 peuvent devoir être effectuées de manière itérative pour construire les données utilisées dans le modèle final.

5) ajuster le modèle de forêts aléatoires, en appliquant un test de multi-colinéarité et une sélection de modèle.

6) prédire le modèle RF global pour chaque tuile de données.


Ce n'est pas la réponse exacte, mais cela pourrait être utilisé comme solution de contournement.

Je suppose que vous n'utilisez pas les 8 tuiles ensemble pour des raisons de mémoire, mais votre zone semble être assez homogène. Ainsi, vous pourriez dégrader la résolution de vos images (par exemple avec un facteur 2 ou 3) et créer une mosaïque. Ensuite, vous entraînez votre classificateur sur l'image mosaïque et vous "enregistrez dans un fichier" la variable de scène contenant les paramètres de votre modèle. Ce fichier peut être téléchargé en tant que variable de scène dans un autre projet et vous pouvez l'utiliser pour appliquer le classificateur à chaque tuile.


Il existe un exemple d'ensemble de règles sur l'échange d'ensembles de règles de la communauté eCognition qui montre une solution de contournement. Notez que vous devrez peut-être vous inscrire pour accéder au lien d'échange de règles. La description de l'ensemble de règles indique ce qui suit :

Cette archive zip contient des exemples de données pour entraîner et appliquer l'algorithme de classification sur plusieurs scènes. Pour le moment, vous pouvez le faire avec un seul projet qui contient les scènes sous forme de cartes séparées. Il s'agit d'une solution de contournement si vous souhaitez entraîner un classificateur non sur un nombre illimité de scènes. eCognition couvrira le cas d'utilisation, pour former un classificateur automatique sur un nombre illimité de projets, espérons-le dans l'une des prochaines versions.

Vous pouvez également utiliser la même approche pour SVM, Bayes et kNN.


L'un des avantages des arbres de décision est que les données d'entrée ordinales (continues ou discrètes) ne nécessitent aucun prétraitement important. En fait, les résultats doivent être cohérents indépendamment de toute normalisation d'échelle ou de translation, puisque les arbres peuvent choisir des points de division équivalents. Le meilleur prétraitement pour les arbres de décision est généralement ce qui est le plus simple ou ce qui est le mieux pour la visualisation, tant qu'il ne modifie pas l'ordre relatif des valeurs dans chaque dimension de données.

Les entrées catégorielles, qui n'ont pas d'ordre sensible, sont un cas particulier. Si votre implémentation de forêt aléatoire n'a pas de moyen intégré pour gérer l'entrée catégorielle, vous devriez probablement utiliser un encodage 1-hot :

  • Si une valeur catégorielle comporte $n$ catégories, vous encodez la valeur à l'aide de $n$ dimensions, une correspondant à chaque catégorie.
  • Pour chaque point de données, s'il appartient à la catégorie $k$, la $k$ième dimension correspondante est définie sur 1, tandis que les autres sont définies sur 0.

Ce codage 1-hot permet aux arbres de décision d'effectuer des tests d'égalité de catégorie en une seule division, car les divisions d'inégalité sur des données non ordinales n'ont pas beaucoup de sens.


Comment enregistrer mon modèle de forêt aléatoire formé et l'appliquer pour tester les fichiers de données un par un ?

Puis-je enregistrer un modèle de ML entraîné, tel que Random Forest (RF), dans R et l'appeler/l'utiliser plus tard sans avoir à recharger toutes les données utilisées pour l'entraîner ?

Quand, dans la vraie vie, j'ai un énorme dossier de centaines et de milliers de fichiers de données à tester, puis-je charger ce modèle que j'ai enregistré quelque part dans R et lui demander d'aller lire les fichiers inconnus un par un (donc je ne suis pas limité par la taille de la RAM) et effectuer une analyse de régression/classification, etc. pour chacun des fichiers lus et stockés TOUS la sortie ensemble dans un fichier.

Si j'ai 100 000 fichiers csv de données dans un dossier et que je souhaite utiliser 30% d'entre eux comme ensemble d'apprentissage et le reste comme test pour une classification de forêt aléatoire (RF).

Je peux sélectionner les fichiers qui m'intéressent, les appeler "fichiers de contrôle". Ensuite, utilisez fread() puis échantillonnez au hasard 50% des données dans ces fichiers, appelez la bibliothèque CARET ou la bibliothèque RandomForest, entraînez mon "model"

Puis-je maintenant enregistrer le modèle quelque part ? Je n'ai donc pas à charger tous les fichiers de contrôle à chaque fois que je veux utiliser le modèle ?

Ensuite, je veux appliquer ce modèle à tous les fichiers csv restants dans le dossier, et je veux qu'il lise ces fichiers csv un par un lors de l'application du modèle, au lieu de les lire tous, en raison d'un problème de RAM.


2 réponses 2

L'option class_weight ne fait rien de plus que d'augmenter le poids de l'erreur avec la classe sous-représentée. En d'autres termes, une mauvaise classification de la classe rare est punie plus sévèrement.

Le classificateur est susceptible de mieux fonctionner sur votre ensemble de test (où les deux classes sont représentées de manière égale, donc les deux sont d'égale importance), mais c'est quelque chose que vous pouvez facilement vérifier vous-même.

Un effet secondaire est que predict_proba renvoie des probabilités qui sont très éloignées des probabilités réelles. (Si vous voulez comprendre pourquoi, tracez la chance moyenne simple et la distribution des scores prédits sans et avec différents class_weight= . Comment les scores prédits changent-ils ?). En fonction de votre cas d'utilisation final (classification, classement, estimation de probabilité), vous devez considérer les choix dans votre modèle.

Strictement parlant, du point de vue de votre entraînement défini, vous ne rencontrez pas de problème de déséquilibre de classe, vous pouvez donc très bien laisser class_weight à sa valeur par défaut Aucun.

Le vrai problème ici et dans les ensembles de données déséquilibrés en général (sur lesquels vous ne fournissez aucune information) est de savoir si le Coût d'erreur de classification est la même pour les deux classes. Et il s'agit d'une décision "commerciale" (c'est-à-dire non statistique/algorithmique).

Habituellement, les ensembles de données déséquilibrés vont de pair avec des problèmes avec différents coûts de classification erronée. Le diagnostic médical est un exemple classique ici, car :

  1. Les ensembles de données sont presque par défaut déséquilibrés, car les personnes en bonne santé sont largement plus nombreuses que les personnes infectées
  2. Nous préférerions une fausse alerte (classer à tort une personne comme ayant la maladie, alors qu'elle n'en a pas) plutôt qu'une détection manquée (classer à tort une personne infectée comme étant en bonne santé, mettant ainsi sa vie en danger)

C'est donc le problème réel auquel vous devriez penser (c'est-à-dire avant même de créer votre ensemble d'entraînement).

Si, pour le entreprise problème que vous essayez de résoudre, il n'y a aucune différence entre mal classer un "0" pour "1" et un "1" pour "0", et étant donné que votre ensemble d'entraînement est équilibré, vous pouvez continuer sans vous soucier d'attribuer une classe différente poids.


2 réponses 2

Dans cette méthode, vous pouvez utiliser le paramètre "compress". Ce paramètre prend des valeurs entières comprises entre 0 et 9, plus la valeur est élevée, plus votre fichier est compressé. Idéalement, une valeur compressée de 3 suffirait.

Le seul inconvénient est que plus la valeur de compression est élevée, plus la vitesse d'écriture/lecture est lente !

La taille d'un modèle de forêt aléatoire ne dépend pas strictement de la taille du jeu de données avec lequel vous l'avez entraîné. Au lieu de cela, vous pouvez voir d'autres paramètres dans la documentation du classificateur Random Forest qui contrôlent la taille du modèle. Des paramètres comme :

  • n_estimators - le nombre d'arbres
  • max_depth - comment "tall" chaque arbre peut obtenir
  • min_samples_split et min_samples_leaf - le nombre d'échantillons qui permettent aux nœuds de l'arbre de se diviser/de continuer à se diviser

Si vous avez entraîné votre modèle avec un nombre élevé d'estimateurs, une profondeur maximale élevée et des échantillons feuille/split très faibles, alors votre modèle résultant peut être énorme - et c'est là que vous rencontrez des problèmes de mémoire.

Dans ces cas, j'ai souvent constaté que la formation de modèles plus petits (en contrôlant ces paramètres) - tant que cela ne tue pas les métriques de performance - résoudra ce problème, et vous pouvez alors vous rabattre sur joblib ou l'autre solutions que vous avez mentionnées pour enregistrer/charger votre modèle.


Ce dont vous parlez, la mise à jour d'un modèle avec des données supplémentaires de manière incrémentielle, est abordé dans le Guide de l'utilisateur sklearn :

Bien que tous les algorithmes ne puissent pas apprendre de manière incrémentielle (c'est-à-dire sans voir toutes les instances à la fois), tous les estimateurs implémentant l'API partial_fit sont candidats. En fait, la possibilité d'apprendre progressivement à partir d'un mini-lot d'instances (parfois appelé « apprentissage en ligne ») est la clé de l'apprentissage hors du noyau car elle garantit qu'à un moment donné, il n'y aura qu'un petit nombre d'instances dans le mémoire principale.

Ils incluent une liste de classificateurs et de régresseurs implémentant partial_fit() , mais RandomForest n'en fait pas partie. Vous pouvez également confirmer que RFRegressor n'implémente pas l'ajustement partiel sur la page de documentation de RandomForestRegressor.


Forêt aléatoire

Vous comprenez maintenant les bases d'Ensemble Learning. Vous savez également quels sont les principaux types d'Ensemble Learning et ce qu'est le Bagging en profondeur. Passons maintenant à l'algorithme Random Forest. Cette section couvrira l'utilisation de la forêt aléatoire pour résoudre une tâche de régression. Je vais essayer d'être aussi précis que possible et essayer de couvrir tous les aspects dont vous pourriez avoir besoin lorsque vous utilisez RF comme algorithme pour un projet ML.

Ce qui sera couvert dans cette section :

  • Qu'est-ce que la forêt aléatoire ?
  • Quand utiliser la forêt aléatoire
  • Avantages et inconvénients
  • Comment utiliser la forêt aléatoire pour la régression ?
  • Forêt aléatoire contre. autres algorithmes

Qu'est-ce que la forêt aléatoire ?

Random Forest est un algorithme d'apprentissage supervisé basé sur la méthode d'apprentissage par ensemble et de nombreux arbres de décision. Random Forest est une technique d'ensachage, donc tous les calculs sont exécutés en parallèle et il n'y a pas d'interaction entre les arbres de décision lors de leur construction. RF peut être utilisé pour résoudre les tâches de classification et de régression.

Le nom « Random Forest » vient de l'idée de Bagging de randomisation des données (Random) et de la création de plusieurs arbres de décision (Forest). Dans l'ensemble, il s'agit d'un algorithme de ML puissant qui limite les inconvénients d'un modèle d'arbre de décision (nous y reviendrons plus tard). De plus, Random Forest est très populaire, comme en témoignent de nombreux concours Kaggle, articles universitaires et postes techniques.

Algorithme de forêt aléatoire

Pour clarifier les choses, examinons l'algorithme exact de la forêt aléatoire :

  1. Donc, vous avez votre jeu de données d'origine D, vous voulez avoir K arbres de décision dans notre ensemble. De plus, vous avez un nombre N – vous allez construire un arbre jusqu'à ce qu'il y ait moins ou égal à N échantillons dans chaque nœud (pour la régression, la tâche N est généralement égale à 5). De plus, vous disposez d'un nombre F – de fonctionnalités qui seront sélectionnées au hasard dans chaque nœud de l'arbre de décision. L'entité qui sera utilisée pour diviser le nœud est choisie parmi ces entités F (pour la tâche de régression, F est généralement égal à sqrt (nombre d'entités du jeu de données d'origine D)
  2. Tout le reste est assez simple. Random Forest crée K sous-ensembles de données à partir de l'ensemble de données d'origine D. Les échantillons qui n'apparaissent dans aucun sous-ensemble sont appelés échantillons « hors sac ».
  3. K arbres sont construits à l'aide d'un seul sous-ensemble. De plus, chaque arbre est construit jusqu'à ce qu'il y ait moins ou égal à N échantillons dans chaque nœud. De plus, dans chaque nœud F, les caractéristiques sont sélectionnées au hasard. L'un d'eux est utilisé pour diviser le nœud
  4. K modèles entraînés forment un ensemble et le résultat final pour la tâche de régression est produit en faisant la moyenne des prédictions des arbres individuels

Dans l'image ci-dessous, vous pouvez voir l'algorithme de la forêt aléatoire pour la classification.

Avantages et inconvénients

Pour commencer, parlons des avantages. Random Forest est basé sur la technique de Bagging qui aide à promouvoir les performances de l'algorithme. La forêt aléatoire ne fait pas exception. Il fonctionne bien "prêt à l'emploi" sans réglage d'hyperparamètres et bien mieux que les algorithmes linéaires, ce qui en fait une bonne option. De plus, Random Forest est plutôt rapide, robuste et peut montrer l'importance des fonctionnalités, ce qui peut être très utile.

De plus, Random Forest limite le plus grand inconvénient des arbres de décision. Il ne dépasse presque pas en raison de la randomisation des sous-ensembles et des fonctionnalités. Premièrement, il utilise un sous-ensemble unique des données initiales pour chaque modèle de base, ce qui contribue à rendre les arbres de décision moins corrélés. Deuxièmement, il divise chaque nœud de chaque arbre de décision à l'aide d'un ensemble aléatoire de fonctionnalités. Une telle approche signifie qu'aucun arbre ne voit toutes les données, ce qui permet de se concentrer sur les modèles généraux au sein des données d'apprentissage et réduit la sensibilité au bruit.

Néanmoins, Random Forest présente des inconvénients. Bien qu'il s'agisse d'une amélioration par rapport à un seul arbre de décision, il existe des techniques plus complexes que la forêt aléatoire. À vrai dire, la meilleure précision de prédiction sur des problèmes difficiles est généralement obtenue par des algorithmes de Boosting.

De plus, Random Forest n'est pas en mesure d'extrapoler sur la base des données. Les prédictions qu'il fait sont toujours dans la plage de l'ensemble d'entraînement. C'est un inconvénient majeur car tous les problèmes de régression ne peuvent pas être résolus en utilisant Random Forest. Le régresseur de forêt aléatoire est incapable de découvrir des tendances qui lui permettraient d'extrapoler des valeurs qui se situent en dehors de l'ensemble d'apprentissage. En fait, c'est pourquoi Random Forest est principalement utilisé pour la tâche de classification.

De plus, Random Forest est moins interprétable qu'un arbre de décision. Les arbres isolés peuvent être visualisés comme une séquence de décisions alors que RF ne le peut pas. Cela peut rendre les choses un peu confuses. Il convient de mentionner qu'un RF entraîné peut nécessiter une mémoire importante pour le stockage, car vous devez conserver les informations de plusieurs centaines d'arbres individuels.

Dans l'ensemble, Random Forest est l'une des méthodes d'ensemble les plus puissantes. En pratique, il peut être légèrement moins performant que le Gradient Boosting, mais il est également beaucoup plus facile à mettre en œuvre. Vous devez absolument l'essayer pour une tâche de régression si les données ont une tendance non linéaire et que l'extrapolation en dehors des données d'apprentissage n'est pas importante. Néanmoins, si votre problème nécessite d'identifier une quelconque tendance, vous ne devez pas utiliser Random Forest car il ne sera pas en mesure de le formuler.

Discutons d'une application plus pratique de Random Forest.

Quand utiliser Random Forest dans la vraie vie

Comme mentionné ci-dessus, Random Forest est principalement utilisé pour résoudre des problèmes de classification. Il convient de noter que Random Forest est rarement utilisé en production simplement à cause d'autres algorithmes affichant de meilleures performances. Cependant, RF est un algorithme indispensable pour les tests d'hypothèses, car il peut vous aider à obtenir des informations précieuses. Par exemple, le modèle de forêt aléatoire « out-of-the-box » était suffisamment bon pour montrer de meilleures performances sur une tâche de détection de fraude difficile qu'un réseau de neurones multi-modèles complexe.

D'après mon expérience, vous voudrez peut-être essayer Random Forest comme algorithme de classification ML pour résoudre des problèmes tels que :

  1. Détection de fraude (classification) –, veuillez vous référer à l'article que j'ai lié ci-dessus. Vous pouvez trouver cela assez excitant car il montre comment des modèles ML simples peuvent battre des réseaux neuronaux complexes sur une tâche non évidente
  2. Credit Scoring (Classification) – une solution importante dans le secteur bancaire. Certaines banques construisent d'énormes réseaux de neurones pour améliorer cette tâche. Cependant, des approches simples pourraient donner le même résultat
  3. Cas e-commerce (Classification) – par exemple, on peut essayer de prédire si le client aimera ou non le produit
  4. Tout problème de classification avec les données d'un tableau, par exemple, les compétitions Kaggle

Dans le cas de la régression, vous devez utiliser Random Forest si :

  1. Ce n'est pas un problème de série temporelle
  2. Les données ont une tendance non linéaire et l'extrapolation n'est pas cruciale

Par exemple, Random Forest est fréquemment utilisé dans la prédiction de valeur (valeur d'une maison ou d'un paquet de lait d'une nouvelle marque).

Il est temps de passer à autre chose et de discuter de la façon d'implémenter Random Forest en Python.

Comment utiliser la forêt aléatoire pour la régression

Pour cette section, j'ai préparé pour vous un petit cahier Google Collab présentant le travail avec Random Forest, une formation sur l'ensemble de données de Boston, le réglage des hyperparamètres à l'aide de GridSearchCV et quelques visualisations. N'hésitez pas à expérimenter et à jouer car il n'y a pas de meilleur moyen de maîtriser quelque chose que la pratique.

Mise en place

Comme mentionné ci-dessus, il est assez facile d'utiliser Random Forest. Heureusement, la bibliothèque sklearn a implémenté l'algorithme à la fois pour la tâche de régression et de classification. Vous devez utiliser le modèle RandomForestRegressor() pour le problème de régression et RandomForestClassifier() pour la tâche de classification.

Si vous n'avez pas encore la bibliothèque sklearn, vous pouvez facilement l'installer via pip . N'oubliez pas non plus que sklearn se met à jour régulièrement, vous devez donc en garder une trace car vous souhaitez utiliser uniquement les versions les plus récentes de la bibliothèque (il s'agit de la version 0.24.0 à ce jour).

Si vous avez tout installé, vous pouvez facilement importer le modèle RandomForestRegressor depuis sklearn, l'affecter à la variable et commencer à travailler avec.

Entraînement

Si vous avez déjà entraîné un modèle ML à l'aide de sklearn, vous n'aurez aucune difficulté à travailler avec RandomForestRegressor. Tout ce que vous avez à faire est d'appliquer la méthode d'ajustement sur votre ensemble d'entraînement et la méthode de prédiction sur l'ensemble de test.

Cependant, Random Forest dans sklearn ne gère pas automatiquement les valeurs manquantes. L'algorithme renverra une erreur s'il trouve des valeurs NaN ou Null dans vos données. Si vous souhaitez le vérifier par vous-même, veuillez vous référer à la section « Valeurs manquantes » du cahier. Bien sûr, vous pouvez facilement supprimer tous les échantillons avec les valeurs manquantes et continuer l'entraînement. Néanmoins, il existe des techniques non standard qui vous aideront à surmonter ce problème (vous pouvez les trouver dans les sections « Remplacement de valeur manquante pour l'ensemble d'apprentissage » et « Remplacement de valeur manquante pour l'ensemble de test » de la documentation).

Dans l'ensemble, n'oubliez pas l'EDA. Il est toujours préférable d'étudier vos données, de les normaliser, de gérer les caractéristiques catégorielles et les valeurs manquantes avant même de commencer l'entraînement. De cette façon, vous pourrez éviter de nombreux obstacles.

Réglage

En général, vous devez toujours ajuster votre modèle car il doit aider à améliorer les performances de l'algorithme. Comme vous le savez peut-être, le réglage est un processus très coûteux en termes de temps. Lors du réglage d'un modèle de forêt aléatoire, la situation est encore pire car vous devez entraîner des centaines d'arbres plusieurs fois pour chaque sous-ensemble de grille de paramètres. Alors, il ne faut pas avoir peur. Croyez-moi, cela en vaut la peine.

Vous pouvez facilement ajuster un modèle RandomForestRegressor à l'aide de GridSearchCV. Si vous n'êtes pas sûr des hyperparamètres de modèle que vous souhaitez ajouter à votre grille de paramètres, veuillez vous référer à la documentation officielle de sklearn ou aux cahiers Kaggle . La documentation Sklearn vous aidera à découvrir les hyperparamètres du RandomForestRegressor. Les cahiers Kaggle, d'autre part, comporteront des grilles de paramètres d'autres utilisateurs qui peuvent être très utiles.

Essai

Lorsque vous avez formé et réglé votre modèle, il est temps de tester ses performances finales. Random Forest n'est qu'un autre algorithme de régression, vous pouvez donc utiliser toutes les métriques de régression pour évaluer son résultat.

Par exemple, vous pouvez utiliser MAE, MSE, MASE, RMSE, MAPE, SMAPE et autres . Cependant, d'après mon expérience, MAE et MSE sont les plus couramment utilisés. Les deux seront parfaits pour évaluer les performances du modèle. Donc, si vous les utilisez, gardez à l'esprit que moins votre erreur est grande, mieux c'est et l'erreur du modèle parfait sera égale à zéro.

En outre, il convient de mentionner que vous ne voudrez peut-être pas utiliser de technique de validation croisée pour vérifier la capacité du modèle à généraliser. Certains Data Scientists pensent que l'algorithme Random Forest fournit une validation croisée gratuite. Vous voyez, Random Forest randomise la sélection des fonctionnalités lors de chaque division de l'arbre, de sorte qu'il ne s'adapte pas comme les autres modèles. C'est pourquoi l'utilisation de la validation croisée sur le modèle de forêt aléatoire peut être inutile.

Néanmoins, si vous souhaitez utiliser la technique de validation croisée, vous pouvez utiliser le concept d'ensemble de retenue. Comme mentionné précédemment, les échantillons de l'ensemble de données d'origine qui n'apparaissaient dans aucun sous-ensemble sont appelés échantillons « out-of-bag ». Ils conviennent parfaitement à l'ensemble de maintien. En règle générale, l'utilisation d'échantillons « hors du sac » comme ensemble de retenue vous suffira pour comprendre si votre modèle se généralise bien.

Dans sklearn, vous pouvez facilement effectuer cela en utilisant un paramètre oob_score = True. S'il est défini sur True, ce paramètre oblige le régresseur de forêt aléatoire à utiliser des échantillons « hors du sac » pour estimer le R^2 sur des données invisibles. Si vous obtenez une valeur supérieure à 0,75, cela signifie que votre modèle n'est pas surajusté (le meilleur score possible est égal à 1)

Visualisation

Il est crucial d'avoir des visualisations précieuses pour votre modèle. Il vous sera plus facile de présenter les résultats si vous disposez de graphiques simples. De plus, c'est assez facile à faire.

Par exemple, vous pouvez visualiser les prédictions du modèle. Dans l'image ci-dessous, les valeurs réelles sont tracées en rouge et les valeurs prédites sont tracées en vert.

En outre, vous pouvez tracer n'importe quel arbre de l'ensemble. Pour l'image s'il vous plaît se référer à la section « Visualisations » du cahier.

Vous pouvez créer vous-même d'autres visualisations précieuses ou consulter Kaggle pour quelques idées. Cependant, n'oubliez pas que votre visualisation doit être facile à interpréter pour être efficace.

Forêt aléatoire vs autres algorithmes

Dans l'ensemble, Random Forest est l'une des méthodes d'ensemble les plus puissantes. Il peut être utilisé à la fois pour la classification et la régression et présente un net avantage sur les algorithmes linéaires tels que la régression linéaire et logistique et leurs variations. De plus, un modèle de forêt aléatoire peut être bien ajusté pour obtenir des résultats de performances encore meilleurs.

Cependant, Random Forest n'est pas parfait et présente certaines limites. Comme mentionné précédemment, vous ne devez pas utiliser Random Forest lorsque vous disposez de données avec des tendances différentes. De plus, les algorithmes de boosting ont tendance à mieux fonctionner que la forêt aléatoire. C'est pourquoi j'ai créé une sorte de workflow de projet ML général pour vous aider à travailler efficacement.

  1. Faire un modèle naïf. Par exemple, prenez simplement une médiane de votre cible et vérifiez la métrique sur vos données de test. N'utilisez aucun algorithme de ML, travaillez simplement avec vos données et voyez si vous trouvez des informations. Vérifiez si vous pouvez utiliser d'autres algorithmes ML tels que Random Forest pour résoudre la tâche
  2. Utilisez un modèle ML linéaire, par exemple, régression linéaire ou logistique, et formez une ligne de base
  3. Utilisez Random Forest, réglez-le et vérifiez s'il fonctionne mieux que la ligne de base. Si c'est mieux, alors le modèle Random Forest est votre nouvelle référence
  4. Utilisez l'algorithme Boosting, par exemple, XGBoost ou CatBoost, réglez-le et essayez de battre la ligne de base
  5. Choisissez le modèle qui obtient les meilleurs résultats

Ainsi, il est parfois difficile de dire quel algorithme fonctionnera le mieux. Vous devez explorer vos options et vérifier toutes les hypothèses. Cela vous aidera à vous plonger profondément dans la tâche et à la résoudre plus efficacement. D'après mon expérience, Random Forest est définitivement un algorithme que vous devez surveiller lors de la résolution d'une tâche de régression.


La forêt aléatoire est essentiellement un rééchantillonnage d'amorçage et des arbres de décision d'entraînement sur les échantillons, donc la réponse à votre question doit répondre à ces deux.

Le rééchantillonnage bootstrap n'est pas un remède pour les petits échantillons. Si vous n'avez que vingt-quatre observations dans votre ensemble de données, alors chacun des échantillons prélevés avec remplacement à partir de ces données ne comprendrait pas plus de vingt-quatre valeurs distinctes. Mélanger les cas et ne pas en dessiner certains ne changerait pas grand-chose à votre capacité à apprendre quoi que ce soit de nouveau sur la distribution sous-jacente. donc un petit échantillon est un problème pour le bootstrap.

Les arbres de décision sont entraînés en divisant les données de manière conditionnelle aux variables prédictives, une variable à la fois, pour trouver les sous-échantillons qui ont le plus grand pouvoir discriminant. Si vous n'avez que vingt-quatre cas, dites que si vous avez de la chance et que toutes les divisions sont de taille égale, alors avec deux divisions, vous vous retrouverez avec quatre groupes de six cas, avec des divisions en arbre, avec huit groupes de trois. Si vous calculiez des moyennes conditionnelles sur les échantillons (pour prédire des valeurs continues dans des arbres de régression, ou des probabilités conditionnelles dans des arbres de décision), vous baseriez votre conclusion uniquement sur ces quelques cas ! Ainsi, les sous-échantillons que vous utiliseriez pour prendre les décisions seraient encore plus petits que vos données d'origine.

Avec de petits échantillons, il est généralement sage d'utiliser des méthodes simples. De plus, vous pouvez rattraper le petit échantillon en utilisant des priors informatifs dans un cadre bayésien (si vous avez des connaissances raisonnables hors données sur le problème), vous pouvez donc envisager d'utiliser un modèle bayésien sur mesure.


3 réponses 3

Vous pouvez certainement utiliser GridSearchCV avec Random Forest. En fait, vous devriez utiliser GridSearchCV pour trouver les meilleurs paramètres qui rendront votre oob_score très élevé.

Certains paramètres à régler sont :

n_estimateurs: Nombre d'arbres que votre forêt aléatoire devrait avoir. Plus il y a de n_estimateurs, moins il y a de surapprentissage. Vous devriez essayer une plage de 100 à 5000.

profondeur max: max_depth de chaque arbre. Vous devez spécifier certains max_depth afin que votre modèle ne mémorise pas les exemples de train.

min_sample_split: le nombre minimum d'échantillons à avoir avant de se diviser en nouveaux nœuds.

Mais ce sont les principaux hyperparamètres que nous réglons pour obtenir une forêt qui fonctionne bien. Et pour obtenir ces hyperparamètres, vous devez utiliser GridSeachCV.

Vous pouvez très bien utiliser le GridSearchCV pour affiner RandomForest.

Je ne comprends pas ce que vous entendez par "Si j'utilise GridSearchCV(), l'ensemble d'apprentissage et l'ensemble de test changent à chaque fois."

Généralement, nous appliquons GridSearchCV sur l'ensemble test_data après avoir effectué le fractionnement de test de train. La validation croisée divise les données d'entraînement en plusieurs fractionnements d'entraînement et de test en fonction de la valeur Kfold que vous donnez. Par exemple, si la valeur k est 10, nous aurons les données d'entraînement divisées en 10 plis où 1 sera utilisé pour les tests et 9 ensemble pour l'entraînement. Cela se produit jusqu'à ce que tous les 10 plis soient utilisés pour les tests, vous obtiendrez donc un score de précision de 10. En plus de cela, dans gridsearchcv, nous passons un ensemble d'hyper paramètres basés sur le modèle que nous utilisons. Cela aide à trouver les meilleurs hyperparamètres pour le modèle afin d'obtenir le meilleur score de précision et également d'éviter le surajustement.

D'autre part, oob correspond à des données non vues par le modèle de forêt aléatoire.

Faites-moi savoir si vous avez besoin de plus d'informations en détail.

Je peux le faire avec GridSearchCV() , mais est-ce correct avec une forêt aléatoire ?

Oui, c'est parfaitement valable. Il ignore la fonction de score oob des forêts aléatoires, mais ce n'est pas nécessairement une mauvaise chose. Voir par ex. https://stats.stackexchange.com/a/462720/232706

Quelle est la convention pour régler les hyper-paramètres avec Random Forest pour obtenir le meilleur score OOB dans sklearn ? Puis-je simplement parcourir un ensemble de paramètres et m'adapter au même ensemble d'entraînement et de test ?

Je pense que ce serait la méthode standard de réglage en utilisant le score oob, sauf qu'il n'y a pas de test défini dans ce cas. (Vous aurez probablement besoin d'un ensemble de tests pour l'estimation des performances futures du modèle final sélectionné : la sélection d'hyperparamètres en fonction de ces scores oob signifie qu'ils ne sont plus des estimations impartiales des performances futures, tout comme dans la validation croisée k-fold ! Votre hyperparamètre -les modèles candidats ne devraient pas voir cet ensemble de test.)