web-dev-qa-db-fra.com

Tracer des arbres pour une forêt aléatoire en Python avec Scikit-Learn

Je veux tracer un arbre de décision d'une forêt aléatoire. Donc, je crée le code suivant: 

clf = RandomForestClassifier(n_estimators=100)
import pydotplus
import six
from sklearn import tree
dotfile = six.StringIO()
i_tree = 0
for tree_in_forest in clf.estimators_:
if (i_tree <1):        
    tree.export_graphviz(tree_in_forest, out_file=dotfile)
    pydotplus.graph_from_dot_data(dotfile.getvalue()).write_png('dtree'+ str(i_tree) +'.png')
    i_tree = i_tree + 1

Mais cela ne génère rien ... Avez-vous une idée de la manière de tracer un arbre de décision à partir d'une forêt aléatoire?

Je vous remercie,

14
Zoya

En supposant que votre modèle de forêt aléatoire soit déjà ajusté, vous devez d'abord importer la fonction export_graphviz:

from sklearn.tree import export_graphviz

Dans votre cycle for, vous pouvez procéder comme suit pour générer le fichier dot

export_graphviz(tree_in_forest,
                feature_names=X.columns,
                filled=True,
                rounded=True)

La ligne suivante génère un fichier png

os.system('dot -Tpng tree.dot -o tree.png')
22
user6903745

Vous pouvez dessiner un seul arbre avec la bibliothèque fast.ai. 

from fastai.structured import draw_tree
from sklearn.ensemble import RandomForestRegressor

m = RandomForestRegressor(n_estimators=1, max_depth=3, bootstrap=False, n_jobs=-1)
m.fit(X_train, y_train)
draw_tree(m.estimators_[0], X_train, precision=3)
0
Mirodil