Ошибка при использовании 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')
К сожалению, нет простого способа отобразить "лучшее" дерево или общее дерево ансамбля из вашего леса, просто дерево случайных примеров.