Ошибка при использовании Sklearn graphviz

когда я пытаюсь экспортировать случайный график леса, используя следующую команду:

tree.export_graphviz(rnd_clf, out_file = None, feature_names = X_test[::1])

Я получаю следующую ошибку:

NotFittedError: This RandomForestClassifier instance is not fitted yet. 
Call 'fit' with appropriate arguments before using this method.

Я не понимаю, почему это говорит мне об этом, хотя я установил случайный классификатор леса, используя:

rnd_clf = RandomForestClassifier(  
             n_estimators=120,
             criterion='gini',
             max_features= None, 
             max_depth = 14 )

rnd_clf.fit(X_train, y_train)

и он отлично работает.

Ответ 1

(Только по документам, без личного опыта)

Вы пытаетесь построить какой-то DecisionTree, используя функцию, подпись которой гласит:

sklearn.tree.export_graphviz(decision_tree, ...)

но вы проходите RandomForest, который представляет собой ансамбль деревьев.

Это не сработает!

Идя глубже, внутренний код для этого здесь:

check_is_fitted(decision_tree, 'tree_')

Таким образом, это запрашивает tree_ атрибутов вашего DecisionTree, которое существует для DecisionTreeClassifier.

Этот атрибут не существует для RandomForestClassifier ! Поэтому ошибка.

Единственное, что вы можете сделать: распечатать каждый DecisionTree в своем ансамбле RandomForest. Для этого вам нужно пройти random_forest.estimators_ чтобы получить основные деревья решений!

Ответ 2

Как и в другом ответе, вы не можете сделать это для леса, только для одного дерева. Вы можете, однако, нарисовать одно дерево из этого леса. Вот как это сделать:

forest_clf = RandomForestClassifier()
forest_clf.fit(X_train, y_train)
tree.export_graphviz(forest_clf.estimators_[0], out_file='tree_from_forest.dot')
(graph,) = pydot.graph_from_dot_file('tree_from_forest.dot')
graph.write_png('tree_from_forest.png')

К сожалению, нет простого способа отобразить "лучшее" дерево или общее дерево ансамбля из вашего леса, просто дерево случайных примеров.