调用sklearn的export_graphviz报错DecisionTreeClassifier不是评估器实例如何解决
问题原因解析
- 你对第一个报错的根因排查完全错误:第一个字符串拼接类型错误,根源不是
model变量的类型问题,而是tree.export_graphviz的class_names参数要求传入字符串列表,你传入的是浮点型的年份列表,方法内部拼接字符串时触发了类型不匹配报错。 - 第二个报错的直接原因:
tree.export_graphviz的第一个参数要求传入已训练的决策树估计器实例,你错误地将模型转成了字符串modelstr传入,不符合参数要求直接报错。
修复方案
按以下两步修改代码即可解决所有报错:
- 删除多余的模型转字符串代码,
tree.export_graphviz第一个参数直接传入训练好的model实例 - 将
class_names传入的年份值统一转成字符串,满足参数类型要求
修正后完整代码
import pandas as pd import sklearn from sklearn import tree from sklearn.tree import DecisionTreeClassifier f = pd.read_csv("vgsales.csv") f = f.round(0) X = f.drop(columns = ['Rank','Name', 'Platform', 'Year', 'Genre','Publisher','JP_Sales','Other_Sales', 'NA_Sales'])[:11] y = f['Year'][:11] model = DecisionTreeClassifier() model.fit(X, y) # 直接传model实例,不要转字符串 tree.export_graphviz(model, out_file = 'FirstModel.dot', feature_names = ['EU_Sales', 'Global_Sales'], # 把年份转成字符串,解决第一个类型错误 class_names = [str(year) for year in sorted(y.unique())], label = 'all', rounded = True, filled = True)
内容的提问来源于stack exchange,提问作者sikee
相关产品推荐
相关产品推荐

