Построить деревья для случайного леса в Python с помощью Scikit-Learn

Я хочу построить дерево решений случайного леса. Итак, я создаю следующий код:

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

Но он ничего не генерирует.. У вас есть идея, как построить дерево решений из случайного леса?

Спасибо,

Ответ 1

Предполагая, что ваша модель Random Forest уже установлена, сначала вы должны сначала импортировать функцию export_graphviz:

from sklearn.tree import export_graphviz

В вашем цикле вы можете сделать следующее для создания файла dot

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

Следующая строка генерирует файл png

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

Ответ 2

Вы можете нарисовать одно дерево:

from sklearn.tree import export_graphviz
from IPython import display
from sklearn.ensemble import RandomForestRegressor

m = RandomForestRegressor(n_estimators=1, max_depth=3, bootstrap=False, n_jobs=-1)
m.fit(X_train, y_train)

str_tree = export_graphviz(m, 
   out_file=None, 
   feature_names=X_train.columns, # column names
   filled=True,        
   special_characters=True, 
   rotate=True, 
   precision=0.6)

# complimentary line, you can exclude it if you don't need it
str_tree = re.sub('Tree {', f'Tree {{ size={size}; ratio={ratio}', str_tree) 
display.display(str_tree)