L'arbre de décision est un algorithme utilisé pour ** l'apprentissage supervisé **. En branchant les données données comme un arbre, nous faisons des prédictions et résumons les données. Un modèle d'apprentissage qui peut être utilisé à la fois pour la régression et la classification.
La figure ci-dessous montre l'arbre de décision pour classer les données en «chiens», «personnes», «oiseaux» et «moustiques». Dans chaque branche, les données sont classées en utilisant le montant des caractéristiques. La partie qui devient la dernière feuille détermine le résultat de la classification.
Ici, comme point à considérer lors de l'extension de chaque branche
Devient important.
Tout d'abord, le critère ** Gain d'information ** est utilisé comme critère pour juger 1.
Pour faire simple, le gain d'information est une valeur qui indique ** dans quelle mesure le nœud enfant a pu classer les données par rapport au nœud parent **. Alternativement, c'est une valeur qui indique ** à quel point l'écart type est réduit à chaque nœud **. Une valeur appelée ** Impure ** est utilisée pour calculer le montant de ce gain d'information. Il existe plusieurs types d'impureté, mais cette fois, nous présenterons les plus représentatifs ** Gini ** et ** Entropy **. Gini Gini est exprimé par la formule suivante.
G = 1 - \sum_{n = 1}^{classes}P(i|t)^2
Vous pouvez voir qu'à chaque nœud, plus la probabilité que les données soient classées dans une classe est élevée, plus Gini sera proche de 0. S'il n'y a qu'une seule classe, Gini sera 0. Inversement, Gini se rapproche de 1 lorsque tous les échantillons appartiennent à des classes différentes. De plus, chaque nœud calcule le ** Gain d'information (IG) ** à partir de Gini.
IG = G(parent) - \sum_{children}\frac{N_j}{N}G(child_j)
Ici, la différence entre la moyenne pondérée du Gini de la branche parente et du Gini de la branche enfant (le rapport du nombre de données contenues dans chaque classe) est acquise en tant que gain d'information.
Entropy L'entropie est exprimée par la formule suivante.
E = - \sum_{i = 1}^{N}P(i|t)*log(P(i|t))
Où P(i|t)Est 0.Plus il est proche de 5(Je ne sais pas si c'est 1 ou 0; je ne peux pas classer)Vous pouvez voir que plus l'entropie est élevée. Au contraire, P(i|t)Est 0か1の時、エントロピーは0となります。
IG = E(parent) - \sum_{children}\frac{N_j}{N}E(child_j)
Comme précédemment, la différence entre la moyenne pondérée de l'entropie d'intersection de la branche parente et l'entropie d'intersection de la branche enfant est acquise en tant que gain d'information.
Une méthode de division avec un gain d'information important est sélectionnée pour chaque nœud.
Gigi est bon pour les problèmes de régression et Entropy est bon pour les problèmes de classification.
Plus l'arborescence ** de l'arbre de décision est profonde, plus le modèle ** correspondant aux données d'apprentissage est sélectionné. En fait, lorsque le dernier nœud enfant a 1 données, toutes les données peuvent être parfaitement classées. Cependant, cela ** surchargerait ** les données de l'échantillon, rendant le modèle dénué de sens. Par conséquent, lors de la création d'un modèle d'apprentissage, il est nécessaire de limiter la profondeur de l'arbre. Dans skitlearn, la profondeur de l'arbre est définie par un paramètre.
from sklearn.tree import DecisionTreeRegressor
clf = DecisionTreeRegressor(criterion="entropy", max_depth=3)
clf = clf.fit(X_train,y_train)
y_pred = clf.predict(X_test)
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion="entropy", max_depth=3)
clf = clf.fit(X_train,y_train)
y_pred = clf.predict(X_test)
Paramètres- | Aperçu | option | Défaut |
---|---|---|---|
criterion | Critères de partage | "gini", "entropy" | "gini" |
splitter | Stratégie de sélection fractionnée | "best", "random" | "best" |
max_depth | La profondeur la plus profonde de l'arbre | int | None |
min_samples_split | Taille minimale de l'échantillon du nœud post-fractionné(S'il est petit, il a tendance à être surappris.) | int(Le nombre d'échantillons)/float(Rapport à tous les échantillons) | 2 |
min_samples_leaf | feuille(Dernier nœud)Taille minimale de l'échantillon requise pour(S'il est petit, il a tendance à être surappris.) | int/float | 2 |
max_features | Nombre d'entités utilisées pour la division(Plus grand a tendance à surapprendre) | int/float, auto, log2 | None |
class_weight | Poids de la classe | "balanced", none | none |
presort | Pré-tri des données(La vitesse de calcul change en fonction de la taille des données) | bool | False |
min_impurity_decrease | Limiter l'impureté et contrôler l'allongement des nœuds | float | 0. |
—— Sensible aux valeurs aberrantes. ――Même avec une petite dispersion, le résultat changera considérablement. ――Le calcul est compliqué et le temps de calcul augmente.
Recommended Posts