Scikit Learn - Arbres de décision

Dans ce chapitre, nous en apprendrons davantage sur la méthode d'apprentissage de Sklearn, appelée arbres de décision.

Les décisions tress (DT) sont la méthode d'apprentissage supervisé non paramétrique la plus puissante. Ils peuvent être utilisés pour les tâches de classification et de régression. L'objectif principal des DT est de créer un modèle prédisant la valeur de la variable cible en apprenant des règles de décision simples déduites des caractéristiques des données. Les arbres de décision ont deux entités principales; l'un est le nœud racine, où les données se divisent, et l'autre est les nœuds de décision ou les feuilles, où nous avons obtenu la sortie finale.

Algorithmes d'arbre de décision

Différents algorithmes d'arbre de décision sont expliqués ci-dessous -

ID3

Il a été développé par Ross Quinlan en 1986. Il est également appelé Iterative Dichotomiser 3. Le but principal de cet algorithme est de trouver les caractéristiques catégorielles, pour chaque nœud, qui donneront le plus grand gain d'information pour les cibles catégorielles.

Il permet à l'arbre de croître à sa taille maximale, puis pour améliorer la capacité de l'arbre sur des données invisibles, applique une étape d'élagage. La sortie de cet algorithme serait un arbre à plusieurs voies.

C4.5

Il est le successeur de ID3 et définit dynamiquement un attribut discret qui partitionne la valeur d'attribut continu en un ensemble discret d'intervalles. C'est la raison pour laquelle il a supprimé la restriction des fonctionnalités catégorielles. Il convertit l'arbre formé ID3 en ensembles de règles «IF-THEN».

Afin de déterminer l'ordre dans lequel ces règles doivent s'appliquer, l'exactitude de chaque règle sera évaluée en premier.

C5.0

Il fonctionne de la même manière que C4.5 mais il utilise moins de mémoire et crée des ensembles de règles plus petits. Il est plus précis que C4.5.

CHARIOT

C'est ce qu'on appelle l'algorithme des arbres de classification et de régression. Il génère essentiellement des fractionnements binaires en utilisant les fonctionnalités et le seuil générant le plus grand gain d'informations à chaque nœud (appelé index Gini).

L'homogénéité dépend de l'indice de Gini, plus la valeur de l'indice de Gini est élevée, plus l'homogénéité est élevée. C'est comme l'algorithme C4.5, mais la différence est qu'il ne calcule pas les ensembles de règles et ne prend pas en charge les variables cibles numériques (régression).

Classification avec arbres de décision

Dans ce cas, les variables de décision sont catégoriques.

Sklearn Module - La bibliothèque Scikit-learn fournit le nom du module DecisionTreeClassifier pour effectuer une classification multiclasse sur un ensemble de données.

Paramètres

Le tableau suivant contient les paramètres utilisés par sklearn.tree.DecisionTreeClassifier module -

Sr. Non Paramètre et description
1

criterion - chaîne, option par défaut = "gini"

Il représente la fonction permettant de mesurer la qualité d'un fractionnement. Les critères pris en charge sont «gini» et «entropie». La valeur par défaut est gini qui est pour l'impureté Gini tandis que l'entropie est pour le gain d'information.

2

splitter - chaîne, option par défaut = "meilleur"

Il indique au modèle, quelle stratégie parmi «meilleure» ou «aléatoire» pour choisir la division à chaque nœud.

3

max_depth - int ou None, facultatif par défaut = None

Ce paramètre décide de la profondeur maximale de l'arbre. La valeur par défaut est None, ce qui signifie que les nœuds s'étendent jusqu'à ce que toutes les feuilles soient pures ou jusqu'à ce que toutes les feuilles contiennent moins de min_smaples_split échantillons.

4

min_samples_split - int, float, option par défaut = 2

Ce paramètre fournit le nombre minimum d'échantillons requis pour fractionner un nœud interne.

5

min_samples_leaf - int, float, option par défaut = 1

Ce paramètre fournit le nombre minimum d'échantillons requis pour être au niveau d'un nœud feuille.

6

min_weight_fraction_leaf - float, option par défaut = 0.

Avec ce paramètre, le modèle obtiendra la fraction pondérée minimale de la somme des poids requis pour être au niveau d'un nœud feuille.

sept

max_features - int, float, string ou None, facultatif par défaut = None

Il donne au modèle le nombre de caractéristiques à prendre en compte lors de la recherche de la meilleure répartition.

8

random_state - int, instance RandomState ou None, facultatif, par défaut = aucun

Ce paramètre représente la graine du nombre pseudo aléatoire généré qui est utilisé lors du brassage des données. Voici les options -

  • int- Dans ce cas, random_state est la graine utilisée par le générateur de nombres aléatoires.

  • RandomState instance - Dans ce cas, random_state est le générateur de nombres aléatoires.

  • None - Dans ce cas, le générateur de nombres aléatoires est l'instance RandonState utilisée par np.random.

9

max_leaf_nodes - int ou None, facultatif par défaut = None

Ce paramètre permettra de développer un arbre avec max_leaf_nodes de la meilleure façon. La valeur par défaut est aucun, ce qui signifie qu'il y aurait un nombre illimité de nœuds feuilles.

dix

min_impurity_decrease - float, option par défaut = 0.

Cette valeur fonctionne comme un critère de division d'un nœud car le modèle divisera un nœud si cette division induit une diminution de l'impureté supérieure ou égale à min_impurity_decrease value.

11

min_impurity_split - float, par défaut = 1e-7

Il représente le seuil d'arrêt précoce de la croissance des arbres.

12

class_weight - dict, liste des dictionnaires, «équilibré» ou Aucun, par défaut = Aucun

Il représente les poids associés aux classes. La forme est {class_label: weight}. Si nous utilisons l'option par défaut, cela signifie que toutes les classes sont supposées avoir un poids un. D'autre part, si vous choisissezclass_weight: balanced, il utilisera les valeurs de y pour ajuster automatiquement les poids.

13

presort - booléen, option par défaut = False

Il indique au modèle s'il faut pré-trier les données pour accélérer la recherche des meilleures divisions lors de l'ajustement. La valeur par défaut est false mais définie sur true, cela peut ralentir le processus de formation.

Les attributs

Le tableau suivant comprend les attributs utilisés par sklearn.tree.DecisionTreeClassifier module -

Sr. Non Paramètre et description
1

feature_importances_ - tableau de forme = [n_features]

Cet attribut renverra l'importance de la fonctionnalité.

2

classes_: - tableau de forme = [n_classes] ou une liste de tels tableaux

Il représente les étiquettes de classes, c'est-à-dire le problème de sortie unique, ou une liste de tableaux d'étiquettes de classe, c'est-à-dire le problème à sorties multiples.

3

max_features_ - int

Il représente la valeur déduite du paramètre max_features.

4

n_classes_ - int ou liste

Il représente le nombre de classes, c'est-à-dire le problème de sortie unique, ou une liste de nombre de classes pour chaque sortie, c'est-à-dire le problème à sorties multiples.

5

n_features_ - int

Il donne le nombre de features lorsque la méthode fit () est exécutée.

6

n_outputs_ - int

Il donne le nombre de outputs lorsque la méthode fit () est exécutée.

Méthodes

Le tableau suivant contient les méthodes utilisées par sklearn.tree.DecisionTreeClassifier module -

Sr. Non Paramètre et description
1

apply(self, X [, check_input])

Cette méthode retournera l'index de la feuille.

2

decision_path(self, X [, check_input])

Comme son nom l'indique, cette méthode retournera le chemin de décision dans l'arborescence

3

fit(soi, X, y [, poids_échantillon,…])

fit () construira un classificateur d'arbre de décision à partir d'un ensemble d'apprentissage donné (X, y).

4

get_depth(soi)

Comme son nom l'indique, cette méthode retournera la profondeur de l'arbre de décision

5

get_n_leaves(soi)

Comme son nom l'indique, cette méthode retournera le nombre de feuilles de l'arbre de décision.

6

get_params(soi [, profond])

Nous pouvons utiliser cette méthode pour obtenir les paramètres de l'estimateur.

sept

predict(self, X [, check_input])

Il prédira la valeur de classe pour X.

8

predict_log_proba(soi, X)

Il prédira les probabilités logarithmiques de classe des échantillons d'entrée fournis par nous, X.

9

predict_proba(self, X [, check_input])

Il prédira les probabilités de classe des échantillons d'entrée fournis par nous, X.

dix

score(soi, X, y [, poids_échantillon])

Comme son nom l'indique, la méthode score () retournera la précision moyenne sur les données de test et les étiquettes données.

11

set_params(self, \ * \ * paramètres)

Nous pouvons définir les paramètres de l'estimateur avec cette méthode.

Exemple d'implémentation

Le script Python ci-dessous utilisera sklearn.tree.DecisionTreeClassifier module pour construire un classificateur pour prédire l'homme ou la femme à partir de notre ensemble de données contenant 25 échantillons et deux caractéristiques à savoir la `` hauteur '' et la `` longueur des cheveux '' -

from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)

Production

['Woman']

Nous pouvons également prédire la probabilité de chaque classe en utilisant la méthode python predict_proba () suivante:

Exemple

prediction = DTclf.predict_proba([[135,29]])
print(prediction)

Production

[[0. 1.]]

Régression avec arbres de décision

Dans ce cas, les variables de décision sont continues.

Sklearn Module - La bibliothèque Scikit-learn fournit le nom du module DecisionTreeRegressor pour appliquer des arbres de décision sur des problèmes de régression.

Paramètres

Paramètres utilisés par DecisionTreeRegressor sont presque les mêmes que ceux utilisés dans DecisionTreeClassifiermodule. La différence réside dans le paramètre «critère». PourDecisionTreeRegressor modules ‘criterion: string, optionnel default = "mse" 'paramètre a les valeurs suivantes -

  • mse- Il représente l'erreur quadratique moyenne. Il est égal à la réduction de la variance comme critère de sélection des caractéristiques. Il minimise la perte L2 en utilisant la moyenne de chaque nœud terminal.

  • freidman_mse - Il utilise également l'erreur quadratique moyenne mais avec le score d'amélioration de Friedman.

  • mae- Il représente l'erreur absolue moyenne. Il minimise la perte L1 en utilisant la médiane de chaque nœud terminal.

Une autre différence est qu'il n'a pas ‘class_weight’ paramètre.

Les attributs

Attributs de DecisionTreeRegressor sont également les mêmes que ceux de DecisionTreeClassifiermodule. La différence est qu'il n'a pas‘classes_’ et ‘n_classes_' les attributs.

Méthodes

Méthodes de DecisionTreeRegressor sont également les mêmes que ceux de DecisionTreeClassifiermodule. La différence est qu'il n'a pas‘predict_log_proba()’ et ‘predict_proba()’' les attributs.

Exemple d'implémentation

La méthode fit () dans le modèle de régression d'arbre de décision prendra des valeurs en virgule flottante de y. voyons un exemple d'implémentation simple en utilisantSklearn.tree.DecisionTreeRegressor -

from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)

Une fois ajusté, nous pouvons utiliser ce modèle de régression pour faire des prédictions comme suit -

DTreg.predict([[4, 5]])

Production

array([1.5])