2016-03-11 1 views
1

Quelqu'un peut-il expliquer pourquoi le paramètre random_state affecte tellement le modèle?paramètre random_state dans les modèles de classification

J'ai un modèle RandomForestClassifier et que vous souhaitez définir le random_state (pour pourpouses de reproductibilité), mais en fonction de la valeur que je l'utilise, je reçois des valeurs très différentes sur ma métrique d'évaluation globale (score F1)

Par exemple, je essayé d'ajuster le même modèle avec 100 valeurs random_state différentes et après le test d'annonce de formation le plus petit F1 était 0.64516129 et le plus grand 0.808823529). C'est une énorme différence.

Ce comportement semble également rendre très difficile la comparaison de deux modèles.

Pensées?

Répondre

2

Si l'attribut random_state affecte vos résultats, cela signifie que votre modèle a une variance élevée. Dans le cas de forêt aléatoire cela signifie simplement que vous utilisez trop petite forêt et devrait augmenter le nombre d'arbres (qui, en raison de l'ensachage - réduire la variance). Dans scikit-learn, ceci est contrôlé par les paramètres n_estimators du constructeur.

Pourquoi cela se produit-il? Chaque méthode ML tente de minimiser l'erreur, qui, d'un point de vue matémati- que, peut généralement être décomposée en biais et en variance [+ bruit] (voir la variance de biais dillema/tradeoff). Le biais est simplement à quelle distance des vraies valeurs votre modèle doit aboutir dans l'attente - cette partie d'une erreur vient généralement de certaines hypothèses antérieures, telles que l'utilisation d'un modèle linéaire pour un problème non linéaire, etc. La variance est la différence entre vos résultats sur différents sous-ensembles de données (ou utiliser des hyperparamètres différents, et dans le cas de méthodes aléatoires, la graine aléatoire est un hyperparamètre). Enfin - le bruit n'est pas une erreur réductible provenant du problème lui-même (ou de la représentation des données). Ainsi, dans votre cas - vous avez simplement rencontré un modèle avec une variance élevée, les arbres de décision sont bien connus pour leur variance extrêmement élevée (et leur faible biais). Ainsi, pour réduire la variance, Breiman a proposé la méthode d'ensachage spécifique, connue aujourd'hui sous le nom de Random Forest. Plus la forêt est grande, plus l'effet de la réduction de la variance est fort. En particulier - forêt avec 1 arbre a une variance énorme, forêt de 1000 arbres est presque déterministe pour les problèmes de taille modérée.

En résumé, que pouvez-vous faire?

  • Augmenter le nombre d'arbres - cela doit travailler, et il est bien compris et méthode justifiée
  • traiter random_seed comme hyperparam'etre lors de votre évaluation, parce que c'est exactement cela - une méta connaissances que vous devez résoudre avant de la main si vous ne souhaitez pas augmenter la taille de la forêt.
+0

merci beaucoup pour l'explication, vous avez raison, en augmentant le nombre d'arbres, a diminué la différence entre le score max et min f1. L'exemple que j'ai mentionné avait 10, avec 100 le diff chute à 0,08 et 0,04 à 200. Pouvez-vous expliquer ce que vous entendez par "traiter random_seed comme un hyperparamètre pendant votre évaluation"? merci encore – Italo

+0

Une autre question, qui semble seulement se produire dans "les modèles liés à l'arbre". J'imagine que cela arriverait dans tous les modèles emsemble, mais cela n'arrive pas dans AdaBoostClassifier ou GradientBoostingClassifier par exemple, même s'ils ont le paramètre random_state (toujours le même résultat, indépendamment de random_state) – Italo