J'utilise scikit-learn pour créer une forêt aléatoire. Cependant, je veux trouver les profondeurs individuelles de chaque arbre. Cela semble être un attribut simple à avoir mais selon la documentation, ( http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html ) il n'y a aucun moyen d'y accéder.
Si cela n'est pas possible, existe-t-il un moyen d'accéder à la profondeur de l'arbre à partir d'un modèle d'arbre de décision?
Toute aide serait appréciée. Je vous remercie.
Chaque instance de RandomForestClassifier
possède un attribut estimators_
, qui est une liste d'instances DecisionTreeClassifier
. La documentation montre qu'une instance de DecisionTreeClassifier
a un attribut tree_
, qui est une instance de la classe (non documentée, je crois) Tree
. Une exploration dans l'interpréteur montre que chaque instance de Tree
a un paramètre max_depth
qui apparaît pour être ce que vous ' re cherche - encore une fois, il est sans papiers.
Dans tous les cas, si forest
est votre instance de RandomForestClassifier
, alors:
>>> [estimator.tree_.max_depth for estimator in forest.estimators_]
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10]
devrait faire l'affaire.
Chaque estimateur possède également une méthode get_depth()
qui peut être utilisée pour récupérer la même valeur avec une syntaxe plus brève:
>>> [estimator.get_depth() for estimator in forest.estimators_]
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10]
Pour éviter le mélange, il convient de noter qu'il existe un attribut de chaque estimateur (et non le tree_
) de chaque estimateur appelé max depth
qui renvoie le réglage du paramètre plutôt que la profondeur de la arbre réel. La relation entre estimator.get_depth()
, estimator.tree_.max_depth
et estimator.max_depth
est expliquée dans l'exemple ci-dessous:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=3, random_state=4, max_depth=6)
iris = load_iris()
clf.fit(iris['data'], iris['target'])
[(est.get_depth(), est.tree_.max_depth, est.max_depth) for est in clf.estimators_]
En dehors:
[(6, 6, 6), (3, 3, 6), (4, 4, 6)]
Définir la profondeur maximale à la valeur par défaut None
permettrait au premier arbre de s'étendre jusqu'à la profondeur 7 et la sortie serait:
[(7, 7, None), (3, 3, None), (4, 4, None)]