使用GridSearchCV和Pipeline训练决策树后Graphviz导出报错
问题根因
GridSearchCV的best_estimator_返回的是你定义的完整Pipeline流水线实例,而export_graphviz仅支持直接传入决策树类模型对象,无法识别Pipeline结构,因此会抛出拟合状态校验失败的错误。
你可以正常输出准确率等评估指标,是因为Pipeline本身封装了predict、score等通用评估方法,支持直接调用,和可视化工具的入参要求不冲突。
解决方案
从最佳Pipeline实例中通过步骤名提取出决策树模型,再传入export_graphviz即可。你在Pipeline中为决策树定义的步名为dec_tree,通过named_steps属性即可获取对应步骤的训练后模型。
修改后的代码段如下:
export_graphviz( # 从Pipeline中取出决策树步骤的模型 tree_gs.best_estimator_.named_steps['dec_tree'], out_file="dec_tree.dot", # 可选补充:传入特征名和分类名提升可视化可读性,示例如下 # feature_names=X.columns.tolist(), # class_names=y.unique().astype(str).tolist(), filled=True)
内容的提问来源于stack exchange,提问作者IcarusX
相关产品推荐
相关产品推荐

