J'essaie de comprendre comment comprendre pleinement le processus de décision d'un modèle de classification d'arbre de décision construit avec sklearn. Les 2 principaux aspects que je regarde sont une représentation graphique de l'arbre et la liste des importances de fonctionnalités. Ce que je ne comprends pas, c'est comment l'importance des fonctionnalités est déterminée dans le contexte de l'arbre. Par exemple, voici ma liste d'importances de fonctionnalités:
Classement des fonctionnalités: 1. FeatureA (0.300237)
Fonction B (0,166800)
Fonction C (0,092472)
Fonction D (0,075009)
Fonction E (0,068310)
Fonction F (0,067118)
Fonction G (0,066510)
Fonction H (0,043502)
Fonction I (0,040281)
Fonction J (0,039006)
Fonction K (0,032618)
FonctionnalitéL (0,008136)
FonctionnalitéM (0,000000)
Cependant, quand je regarde le haut de l'arbre, cela ressemble à ceci:
En fait, certaines des caractéristiques classées «les plus importantes» n'apparaissent que beaucoup plus bas dans l'arborescence, et le sommet de l'arborescence est FeatureJ, qui est l'une des entités les moins bien classées. Mon hypothèse naïve serait que les caractéristiques les plus importantes seraient classées près du sommet de l'arbre pour avoir le plus grand impact. Si c'est incorrect, alors qu'est-ce qui rend une fonctionnalité «importante»?
la source
Réponses:
Il n'est pas nécessaire que plus une entité est importante, plus son nœud est élevé dans l'arbre de décision.
C'est simplement parce que des critères différents (par exemple Gini Impureté, Entropie-Information Gain, MSE, etc.) peuvent être utilisés dans chacun de ces deux cas (division vs importance).
Par exemple,
SkLearn
vous pouvez choisir de diviser les nœuds de l'arbre de décision selon le critère Entropy-Information Gain (voircriterion
&'entropy'
àSkLearn
) tandis que l'importance des fonctionnalités est donnée par Gini Importance qui est la diminution moyenne de Gini impureté pour une variable donnée dans tous les arbres de la forêt au hasard (voirfeature_importances_
àSkLearn
et ici ).Si j'ai raison, il en
SkLearn
va de même même si vous choisissez de diviser les nœuds sur l'arbre de décision selon le critère Gini Impurity alors que l'importance des fonctionnalités est donnée par Gini Importance car Gini Impurity et Gini Importance ne sont pas identiques (voir aussi ceci et cela sur Stackoverflow à propos de l'importance de Gini).la source
Dans scikit-learn, l'importance des fonctionnalités est la diminution de l'impureté des nœuds. La clé est qu'il ne mesure l'importance qu'au niveau du nœud. Ensuite, tous les nœuds sont pondérés par le nombre d'échantillons atteignant ce nœud.
Ainsi, si seuls quelques échantillons se retrouvent dans le nœud gauche après la première division, cela ne signifie pas que J est la caractéristique la plus importante car le gain sur le nœud gauche peut n'affecter que très peu d'échantillons. Si vous imprimez également le nombre d'échantillons dans chaque nœud, vous obtiendrez une meilleure image de ce qui se passe.
la source
Ce n'est pas parce qu'un nœud est plus bas sur l'arbre qu'il est moins important. L'importance des fonctionnalités dans sci-kitlearn est calculée par la façon dont un nœud sépare purement les classes (index Gini). Vous remarquerez même dans votre arbre recadré que A est divisé trois fois par rapport à celui de J et que les scores d'entropie (une mesure de pureté similaire à Gini) sont quelque peu plus élevés dans les nœuds A que J.
Cependant, si vous ne pouviez choisir qu'un seul nœud, vous choisiriez J car cela donnerait les meilleures prédictions. Mais si vous aviez la possibilité d'avoir plusieurs nœuds prenant plusieurs décisions différentes, A serait le meilleur choix.
la source
L'importance des variables est mesurée par la diminution de la précision du modèle lorsque la variable est supprimée. Le nouvel arbre de décision créé avec le nouveau modèle sans la variable pourrait être très différent de l'arbre d'origine. La décision de fractionnement dans votre diagramme se fait en tenant compte de toutes les variables du modèle.
Quelle variable diviser à la racine (et aux autres nœuds) est mesurée par l'impureté. Une bonne pureté (par exemple: tout dans la branche gauche a la même valeur cible) n'est pas une garantie d'une bonne précision. Vos données peuvent être biaisées, votre branche droite a plus de réponses que votre branche gauche. Par conséquent, il n'est pas bon de classer correctement la branche gauche, nous devons également considérer la branche droite. Par conséquent, la variable de fractionnement peut ou non être une variable importante pour la précision globale du modèle.
L'importance des variables est une meilleure mesure pour la sélection des variables.
la source