Apprentissage automatique - Arbre de décision


Arbre de décision (Decision Tree)

Dans ce chapitre, nous vous montrerons comment créer un "arbre de décision". Un arbre de décision est un diagramme de processus qui peut vous aider à prendre des décisions en fonction de votre expérience passée.

Dans cet exemple, une personne essaiera de décider s'il/elle devrait participer au programme de comédie.

Heureusement, dans notre exemple, le personnage en question s'inscrit à chaque fois que le programme de comédie est organisé dans le village, et il/elle s'inscrit également à des informations sur les comédiens de comédie, et il/elle s'inscrit également à savoir s'il/elle y est allé(e).

Âge Expérience Rank Nationality Go
36 10 9 UK NO
42 12 4 USA NO
23 4 6 N NO
52 4 4 USA NO
43 21 8 USA YES
44 14 5 UK NO
66 3 7 N YES
35 14 9 UK YES
52 13 7 N YES
35 5 9 N YES
24 3 5 USA NO
18 3 7 UK YES
45 9 9 UK YES

Maintenant, sur la base de ce jeu de données, Python peut créer un arbre de décision, cet arbre de décision peut être utilisé pour décider s'il vaut la peine de participer à tout nouveau spectacle.

Principe de fonctionnement

Tout d'abord, importez les modules nécessaires et lisez le jeu de données à l'aide de pandas :

Exemple

Lire et afficher le jeu de données :

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg
df = pandas.read_csv("shows.csv")
print(df)

Exécuter l'exemple

Pour créer un arbre de décision, toutes les données doivent être numériques.

Nous devons convertir les colonnes non numériques 'Nationality' et 'Go' en valeurs numériques.

Pandas a une map() Méthode, cette méthode accepte un dictionnaire contenant des informations sur la manière de convertir les valeurs.

{'UK': 0, 'USA': 1, 'N': 2}

Cela signifie convertir la valeur 'UK' en 0, 'USA' en 1 et 'N' en 2.

Exemple

Changer les valeurs de chaîne en valeurs numériques :

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)
print(df)

Exécuter l'exemple

Ensuite, nous devons séparer les colonnes des caractéristiques de la colonne cible.

Les colonnes des caractéristiques sont celles à partir desquelles nous essayons de prédire, et la colonne cible est celle qui contient les valeurs que nous essayons de prédire.

Exemple

X est la colonne des caractéristiques, y est la colonne cible :

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

Exécuter l'exemple

Maintenant, nous pouvons créer un arbre de décision réel, adapté à nos détails, puis enregistrer un fichier .png sur l'ordinateur :

Exemple

Créez un arbre de décision, enregistrez-le sous forme d'image, puis affichez l'image :

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')
img = pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()

Exécuter l'exemple

Explication des résultats

L'arbre de décision utilise vos décisions précédentes pour calculer la probabilité que vous soyez prêt à voir un comédien.

Lisons les différents aspects de l'arbre de décision :


Rank

Rank <= 6.5 représente que les comédiens classés en dessous de 6.5 suivront True flèche (vers la gauche), et le reste suit False flèche (vers la droite).

gini = 0.497 représente la qualité de la segmentation, et est toujours un nombre entre 0.0 et 0.5, où 0.0 signifie que tous les échantillons obtiennent le même résultat, et 0.5 signifie que la segmentation est complètement au milieu.

samples = 13 représente que, à ce point de décision, il reste encore 13 comédiens, car c'est la première étape, donc tous sont des comédiens.

value = [6, 7] représente que dans ces 13 comédiens, 6 recevront 'NO' et 7 recevront 'GO'.

Gini

Il existe de nombreuses méthodes de segmentation des échantillons, nous utilisons la méthode GINI dans ce tutoriel.

La méthode Gini utilise la formule suivante :

Gini = 1 - (x/n)2 - (y/n)2

Dans ce cas, x est le nombre de réponses positives ('GO'), n est le nombre d'échantillons, et y est le nombre de réponses négatives ('NO'), calculés selon la formule suivante :

1 - (7 / 13)2 - (6 / 13)2 = 0.497


La prochaine étape comprend deux cases, l'une pour les comédiens, dont le 'Rank' est de 6.5 ou inférieur, et l'autre pour le reste.

True - 5 comédiens prennent fin ici :

gini = 0.0 représente que tous les échantillons obtiennent le même résultat.

samples = 5 représente que dans cette branche il reste encore 5 comédiens (5 comédiens de niveau 6.5 ou inférieur).

value = [5, 0] ce qui signifie que 5 recevra "NO" et 0 recevra "GO".

False - 8 comédiens de théâtre continuent :

Nationality (nationalité)

Nationality <= 0,5 ce qui signifie que les comédiens dont la valeur de nationalité est inférieure à 0,5 suivront la flèche de gauche (ce qui signifie que tous ceux venant du Royaume-Uni), et les autres suivront la flèche de droite.

gini = 0,219 ce qui signifie que environ 22% des échantillons se déplaceront dans une direction.

samples = 8 ce qui indique qu'il reste 8 comédiens dans cette branche (8 comédiens dont le niveau est supérieur à 6,5).

value = [1, 7] ce qui signifie que dans ces 8 comédiens, 1 recevra "NO" et 7 recevront "GO".


True - 4 comédiens de théâtre continuent :

Age (âge)

Age <= 35,5 ce qui signifie que les comédiens de 35,5 ans ou moins suivront la flèche de gauche, et les autres suivront la flèche de droite.

gini = 0,375 ce qui signifie que environ 37,5% des échantillons se déplaceront dans une direction.

samples = 4 ce qui indique qu'il reste 4 comédiens dans cette branche (4 comédiens britanniques).

value = [1, 3] ce qui signifie que dans ces 4 comédiens, 1 recevra "NO" et 3 recevront "GO".

False - 4 comédiens ici prennent fin :

gini = 0.0 Représente que tous les échantillons obtiennent le même résultat.

samples = 4 ce qui indique qu'il reste 4 comédiens dans cette branche (4 comédiens britanniques).

value = [0, 4] ce qui signifie que dans ces 4 comédiens, 0 recevra "NO" et 4 recevront "GO".


True - 2 comédiens ici prennent fin :

gini = 0.0 Représente que tous les échantillons obtiennent le même résultat.

samples = 2 ce qui indique qu'il reste 2 comédiens dans cette branche (2 comédiens de 35,5 ans ou moins).

value = [0, 2] ce qui signifie que dans ces 2 comédiens, 0 recevra "NO" et 2 recevront "GO".

False - 2 comédiens de théâtre continuent :

Experience (expérience)

Experience <= 9,5 ce qui signifie que les comédiens ayant 9,5 ans d'expérience ou plus suivront la flèche de gauche, et les autres suivront la flèche de droite.

gini = 0,5 ce qui signifie que 50% des échantillons se déplaceront dans une direction.

samples = 2 ce qui indique qu'il reste 2 comédiens dans cette branche (2 comédiens dont l'âge dépasse 35,5 ans).

value = [1, 1] ce qui signifie que l'un des deux comédiens recevra "NO" et l'autre recevra "GO".


True - 1 comédien ici prend fin :

gini = 0.0 Représente que tous les échantillons obtiennent le même résultat.

samples = 1 Représente que dans cette branche il reste encore 1 acteur de comédie (1 acteur ayant 9,5 ans ou moins d'expérience dans la comédie).

value = [0, 1] Représente que 0 représente "NON", 1 représente "ALLER".

False - 1 acteur ici :

gini = 0.0 Représente que tous les échantillons obtiennent le même résultat.

samples = 1 Représente que dans cette branche il reste encore 1 acteur de comédie (l'un d'eux a plus de 9,5 ans d'expérience dans la comédie).

value = [1, 0] 1 représente "NON", 0 représente "ALLER".

Valeur prédite

Nous pouvons utiliser l'arbre de décision pour prédire de nouvelles valeurs.

Par exemple : Dois-je voir un programme joué par un acteur de comédie américain de 40 ans, ayant 10 ans d'expérience, avec un classement de comédie de 7 ?

Exemple

Utiliser predict() Méthode pour prédire de nouvelles valeurs :

print(dtree.predict([[40, 10, 7, 1]]))

Exécuter l'exemple

Exemple

Si le niveau de comédie est de 6, quelle est la réponse ?

print(dtree.predict([[40, 10, 6, 1]]))

Exécuter l'exemple

Résultats différents

Si vous l'exécutez suffisamment de fois, même si vous entrez les mêmes données, l'arbre de décision vous fournira des résultats différents.

C'est parce que l'arbre de décision ne peut pas nous donner une réponse définitive de 100 %. Elle est basée sur la probabilité des résultats, et les réponses peuvent varier.