如何理解scikit-learn中DecisionTreeClassifier的输出?

yeg*_*gle 2 scikit-learn

我正在学习ML并用于scikit-learn做一个基本的决策树分类.

DictVectorizer要素的值是分类的,所以我用来转换原始要素值.这是我的代码:

training_set # list of dict representing the traing set
labels # corresponding labels of the training set
vec = DictVectorizer()
vectorized = vec.fit_transform(training_set)
clf = tree.DecisionTreeClassifier()
clf.fit(vectorized.toarray(), labels)

with open("output.dot", "w") as output_file:
    tree.export_graphviz(clf, out_file=output_file)
Run Code Online (Sandbox Code Playgroud)

但我不明白输出图.它包含一个树,每个节点标记X[1] <= 0.5000或类似的东西.我所期望的是标记的节点FEATURE_1 == VALUE_1,un-vectorized信息显示在树上.

可能吗?

更新:

例如,FEATURE_1有三种可能的值A,B,C,其又被矢量成0,0,0,1,1,0分别.我想要的是图表FEATURE_1 == A而不是X[1] <= 0.5

在此输入图像描述

ogr*_*sel 9

您可以将要素名称传递给树导出方法:

with open("output.dot", "w") as output_file:
    tree.export_graphviz(clf, feature_names=vec.get_feature_names(),
                         out_file=output_file)
Run Code Online (Sandbox Code Playgroud)

分类器本身并不知道数据的"含义",它只处理连续的数值,因此需要使用矢量化器对分类变量进行一次热编码,将二进制变量安全地作为连续变量处理.范围[0, 1],所有实际值为0或1,中间没有任何内容.

要了解DictVectorizer单热编码的方式,请查看文档中的示例代码段.