web-dev-qa-db-fra.com

Comment ajuster les paramètres dans Random Forest, en utilisant Scikit Learn?

class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
                                              criterion='gini', 
                                              max_depth=None,
                                              min_samples_split=2,
                                              min_samples_leaf=1, 
                                              min_weight_fraction_leaf=0.0, 
                                              max_features='auto', 
                                              max_leaf_nodes=None, 
                                              bootstrap=True, 
                                              oob_score=False,
                                              n_jobs=1, 
                                              random_state=None,
                                              verbose=0, 
                                              warm_start=False, 
                                              class_weight=None)

J'utilise un modèle de forêt aléatoire avec 9 échantillons et environ 7 000 attributs. Parmi ces exemples, mon classificateur reconnaît 3 catégories.

Je sais que les conditions sont loin d’être idéales, mais j’essaie de déterminer quels sont les attributs les plus importants pour la prédiction des caractéristiques. Quels paramètres seraient les meilleurs pour Tweak pour optimiser l’importance des fonctionnalités?

J'ai essayé différents n_estimators et a remarqué que la quantité de "caractéristiques significatives" (c'est-à-dire des valeurs non nulles dans la feature_importances_ _ tableau) a augmenté de façon spectaculaire.

J'ai lu la documentation, mais si quelqu'un a de l'expérience dans ce domaine, j'aimerais savoir quels paramètres sont les meilleurs à régler et une brève explication de la raison.

33
O.rka

D'après mon expérience, il existe trois fonctionnalités qui méritent d'être explorées avec sklearn, RandomForestClassifier, par ordre d'importance:

  • n_estimators

  • max_features

  • criterion

n_estimators ne vaut vraiment pas la peine d’être optimisé. Plus vous donnerez d'estimateurs, mieux ce sera. 500 ou 1000 suffisent généralement.

max_features vaut la peine d’être explorée pour de nombreuses valeurs différentes. Cela peut avoir un impact important sur le comportement du RF), car il détermine le nombre de fonctionnalités que chaque arbre du RF considère à chaque scission.

criterion peut avoir un petit impact, mais généralement le réglage par défaut est correct. Si vous avez le temps, essayez-le.

Veillez à utiliser GridSearch de Sklearn (de préférence GridSearchCV, mais la taille de votre ensemble de données est trop petite) lorsque vous essayez ces paramètres.

Si je comprends bien votre question, cependant, vous n’avez que 9 échantillons et 3 classes? Vraisemblablement 3 échantillons par classe? Il est très, très probable que votre RF va sur-adapter avec ce peu de données, sauf s’il s’agit de bons enregistrements représentatifs.

54
Randy Olson

Les parties cruciales sont généralement trois éléments:

  • nombre d'estimateurs - habituellement, plus la forêt est grande, mieux c'est, il y a peu de chance de sur-équiper ici
  • profondeur maximale de chaque arbre (aucune valeur par défaut, conduisant à une arborescence complète) - la réduction de la profondeur maximale permet de lutter contre le surajustement
  • nombre maximal de fonctionnalités par division (sqrt (d) par défaut) - vous pouvez en jouer un peu, car cela altère considérablement le comportement de l’arbre entier. sqrt heuristique est généralement un bon point de départ, mais une zone idéale pourrait être ailleurs
18
lejlot

This Cet article merveilleux contient une explication détaillée des paramètres réglables, de la méthode de suivi du compromis performances/vitesse, de quelques conseils pratiques et de la procédure de recherche sur grille.

5
Anant Gupta

n_estimators est bon comme disent les autres. Il est également efficace pour lutter contre la suralimentation lors de l’augmentation.

Mais je pense min_sample_split est également utile en cas de surajustement dans un jeu de données à petit échantillon mais avec de grandes entités.

1
Liu Bei