如何在scikit-learn DecisionTreeRegressor中使用实际的功能名称而不是"X"?

Shu*_*uan 7 python scikit-learn

我想这是可能的,因为在fit函数的def中它说:

X:类似数组,shape = [n_samples,n_features]

我现在有,

在此输入图像描述

我当然可以生成决策树的字符串表示,然后X[]用实际的功能名称替换.但我想知道该fit函数是否可以直接将特征名称作为输入的一部分?我为每个样本尝试了以下格式

  • [1,2,"feature_1","feature_2"]

  • [[1,2],["feature_1","feature_2"]]

但都没有奏效.这是什么shape意思?你能举个例子吗?

Mat*_*use 14

fit函数本身不支持这样的事情.但是,您可以使用export_graphviz成员函数绘制决策树,包括要素标签.(这不是你如何生成上面的树?).基本上,你会做这样的事情:

iris = load_iris()
t = tree.DecisionTreeClassifier()
fitted_tree = t.fit(iris.data, iris.targets)
outfile = tree.export_graphviz(fitted_tree, out_file='filename.dot', feature_names=iris.feature_names)
outfile.close()
Run Code Online (Sandbox Code Playgroud)

这将产生一个'dot'文件,graphviz(必须单独安装)然后可以"渲染"成传统的图像格式(postscript,png等).例如,要创建一个png文件,你将运行:

dot -Tpng filename.dot > filename.png
Run Code Online (Sandbox Code Playgroud)

点文件本身是一种纯文本格式,并且相当不言自明.如果您想调整文本,可以使用您选择的文本编辑器中的简单查找替换.还有python模块可以直接与graphviz及其文件进行交互.PyDot似乎很受欢迎,但也有其他人.


文档中的shape引用fit仅涉及X训练数据矩阵的布局.具体来说,它期望第一个索引在训练示例中变化,而第二个索引则指向特征.例如,假设您的数据shape是(150,4),就像这样iris.data.该fit函数将其解释为包含150个训练样例,每个训练样例由四个值组成.