Élagage de la complexité des coûts dans les arbres de décision

Contenu

Cet article a été publié dans le cadre du Blogathon sur la science des données.

Comprenez le problème du surapprentissage dans les arbres de décision et résolvez-le en réduisant la complexité et le coût minimal à l'aide de Scikit-Learn en Python

L'arbre de décision est l'un des outils les plus intuitifs et les plus efficaces de la boîte à outils d'un data scientist.. Il a une structure arborescente inversée qui était autrefois utilisée uniquement dans l'analyse de décision, mais maintenant c'est aussi un brillant algorithme d'apprentissage automatique, surtout quand on a un problème de tri sur les mains.

Ces arbres de décision sont bien connus pour leur capacité à capturer des modèles dans les données.. Mais, l'excès de quoi que ce soit est nocif, vérité? Les arbres de décision sont tristement célèbres car ils peuvent trop s'accrocher aux données sur lesquelles ils sont formés.

Donc, notre arbre donne des résultats d'implémentation médiocres car il ne peut pas traiter un nouvel ensemble de valeurs.

image-vedette-8347301

Mais ne t'inquiètes pas! Comme un mécanicien qualifié, il a des clés de toutes tailles disponibles dans sa boîte à outils, un expert data scientist a également son ensemble de techniques pour faire face à tout type de problème. Et c'est ce que nous allons explorer dans cet article..

Le rôle de la taille dans les arbres de décision

L'élagage est l'une des techniques utilisées pour surmonter notre problème de surapprentissage. Taille, au sens littéral, est une pratique qui implique l'enlèvement sélectif de certaines parties d'un arbre (la plante), comme des branches, pousses ou racines, pour améliorer la structure des arbres et favoriser une croissance saine. C'est exactement ce que fait également la taille avec nos arbres de décision. Cela le rend polyvalent pour qu'il puisse s'adapter si nous lui donnons de nouvelles informations, résolvant ainsi le problème du surapprentissage.

Réduire la taille d'un arbre de décision, lo que puede aumentar ligeramente el error de entraînement, mais diminue considérablement l'erreur de test, ce qui le rend plus adaptable.

Élagage d'un coût et d'une complexité minimes est l'un des types d'élagage par arbre de décision.

Cet algorithme est paramétré par α (≥0) connu sous le nom de paramètre de complexité.

Le paramètre de complexité est utilisé pour définir la mesure de la complexité des coûts, Rune(T) d'un arbre donné T: Rune(T) = R (T) + une | T |

où | T | est le nombre de nœuds terminaux dans T et R (T) est traditionnellement défini comme le taux total de mauvaise classification des nœuds terminaux.

Dans sa version 0.22, Scikit-learn a introduit ce paramètre appelé ccp_alpha (Oui! C'est court pour Élagage de la complexité des coûts – Alfa) aux arbres de décision qui peuvent être utilisés pour faire la même chose.

Construire l'arbre de décision en Python

Nous utiliserons l'ensemble de données Iris pour ajuster l'arbre de décision. Vous pouvez télécharger le jeu de données ici.

Premier, importons les bibliothèques de base et l'ensemble de données requis:

256341_tdqxh0n70ie6d19gh0hziw-1198314

L'ensemble de données ressemble à ceci:

image-1-4122232

Notre objectif est de prédire l'espèce d'une fleur en fonction de la longueur et de la largeur de son sépale.

Nous allons diviser l'ensemble de données en deux parties: former et tester. Nous faisons cela pour que nous puissions voir comment notre modèle fonctionne également sur des données invisibles. Nous utiliserons le train_test_split fonction de sklearn.model_selection diviser l'ensemble de données.

image-2-8128487

À présent, ajustons un arbre de décision à la partie du train et prédisons à la fois dans le test et dans la formation. nous utiliserons DecisionTreeClassifier de sklearn.tree dans ce but.

image-3-3076137

Par défaut, la fonction arbre de décision ne fait pas d'élagage et permet à l'arbre de grandir autant qu'il le peut. On obtient un score de précision de 0,95 Oui 0,63 dans le train et sur l'éprouvette, respectivement, comme il est montré dans ce qui suit. On peut dire que notre modèle est sur-équipé, c'est-à-dire, mémoriser la partie du train, mais cela peut ne pas fonctionner aussi bien dans la partie test.

image-4-1641353

Arbre de décision dans sklearn, il a une fonction appelée cost_complexity_pruning_path, qui donne les alphas effectifs des sous-arbres lors de la taille ainsi que les impuretés correspondantes. En d'autres termes, nous pouvons utiliser ces valeurs alpha pour élaguer notre arbre de décision:

image-5-3967849

Nous allons définir ces valeurs alpha et les transmettre à ccp_alpha paramètre de notre DecisionTreeClassifier. En boucle dessus alfa quartier général, nous trouverons la précision dans les parties d'entraînement et de test de notre ensemble de données.

image-6-7729865

image-7-5156829

Dans le graphique ci-dessus, on voit qu'entre alpha = 0.01 Oui 0.02, nous obtenons la plus haute précision de test. Bien que la précision de notre train ait diminué à 0,8, notre modèle est maintenant plus généralisé et fonctionnera mieux avec des données invisibles.

image-8-3359046

Remarques finales

Si vous voulez comprendre les mathématiques derrière l'élagage des coûts et de la complexité, cliquez sur ici. Consultez la documentation scikit-learn pour les arbres de décision en cliquant sur ici.

Vous pouvez trouver le cahier dans mi GitHub et regarde de plus près ce que j'ai fait. En outre, connectez-vous avec moi sur LinkedInet parlons des données.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données