【发布时间】:2016-05-02 05:17:34
【问题描述】:
我使用 GridSearchCV 开发了一个决策树。当我尝试使用 export graphviz 导出树时,我收到一个我不明白的错误。我根本不使用 ABCMeta 对象。
from sklearn import tree
pipeline = Pipeline([
('vect', tfidf_vectorizer),
('clf', DecisionTreeClassifier()),
])
grid_dt = GridSearchCV(
pipeline,
param_grid=params_dt, # parameters to tune
# refit=True, n_jobs=-1,
scoring='accuracy', cv=10
)
dt_fit = grid_dt.fit(X_train, y_train)
with open('dtvis.dot', 'w') as file:
tree.export_graphviz(dt_fit , out_file = "dtvis.dot", feature_names=terms, class_names=True)
file.close()
import subprocess
subprocess.call(['dot', '-Tpdf', 'dtvis.dot', '-o' 'dtvis.pdf'])
追溯:
Traceback (most recent call last):
File "../dt.py", line 241, in <module>
dt_grid = DecisionTreeClassifier(**dt_fit)
TypeError: ABCMeta object argument after ** must be a mapping, not GridSearchCV
新的回溯:
Traceback (most recent call last):
File ".../dt.py", line 245, in <module>
export_graphviz(dt_fit, out_file = "dtvis.dot", feature_names=terms, class_names=True)
.../export.py", line 403, in export_graphviz
recurse(decision_tree.tree_, 0, criterion=decision_tree.criterion)
AttributeError: 'GridSearchCV' object has no attribute 'tree_'
这可能是罪魁祸首(tree.export_graphviz):tree.export_graphviz() 与 export_graphviz() 吗?当它起作用时,clf 是 tree.DecisionTreeClassifier 和 tree.export_graphviz。我尝试在两行中使用和不使用这些前缀都没有成功。 任何建议或想法将不胜感激!
【问题讨论】:
-
请显示完整的回溯。
-
@BrenBarn 好的,谢谢!
-
您可以看到该错误发生在您到达代码的 graphviz 部分之前,因此 graphviz 与它无关。您打算该代码做什么?
dt_fit是一个拟合的分类器对象;你希望如何从中创建一个新的分类器? -
我正在尝试使用 GridSearchCV 将拟合的分类器对象传递给 graphviz,以便它输出树。以前,当我只运行一个没有 GridSearchCV 的简单分类器 tree.DecisionTreeClassifier() 时,我没有任何问题。我将更新我现在拥有的代码。
-
您拟合的分类器对象是
dt_fit。你为什么要创建 另一个 分类器对象?
标签: python scikit-learn graphviz decision-tree