当我尝试使用以下命令导出一个随机森林图时:
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)
它的工作原理很好。
(仅由文档进行;没有个人经验)
您正在尝试使用签名读取的函数来绘制一些 deciesttree :
sklearn.tree.export_graphviz(decision_tree, ...)
但是您正在传递 Randomforest ,这是树的集合。
那将不起作用!
更深入,内部的代码在这里:
check_is_fitted(decision_tree, 'tree_')
因此,这要求您的决策者的属性tree_
,该属性存在于DecisionTreeClalefier。
Random ForestClassifier不存在此属性!因此错误。
您唯一可以做的事情:在您的Randomforest集合中打印每个决策者。为此,您需要遍历random_forest.estimators_
才能获得基础决策!
就像其他答案所说的那样,您不能为森林,只有一棵树。但是,您可以从该森林中绘制一棵树。这是这样做的方法:
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')
不幸的是,没有简单的方法可以绘制"最佳"树或森林中的整体合奏树,只是一个随机的示例树。
enter code herefrom IPython.display import Image
from sklearn.`enter code here`externals.six import StringIO
from sklear`enter code here`n.tree import export_graphviz
import pydotplus
import pydot`enter code here`
dt = DecisionTreeClassifier(criterion = 'entropy', max_depth = 3, min_samples_split = 20, class_weight = "balanced")
dtree = dt.fit(ctg_x_train,ctg_y_train)
k
dot_data = StringIO()
ctg_x_train_names = ctg_x_train.columns
import matplotlib.pyplot as plt
fig = plt.figure(figsize = (12,12))
export_graphviz(dtree, out_file=dot_data,filled = True, rounded = True,special_characters = True, feature_names = ctg_x_train_names)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
(graph,) = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())