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

Scikit learn 如何理解scikit learn中DecisionTreeClassifier的输出?,scikit-learn,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_se

我正在学习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)

但我不懂输出图。它包含一个树,每个节点都标记为
X[1]
X[1]当值处于连续间隔时,机器学习者将对值进行排序并查找所有中间值,以找到基尼指数最高的值

这是合理的,因为在连续域中,找到精确值为3.1415的测试实例的机会为零。在这种情况下,分类器不应该知道该做什么


我不知道scikit learn,但例如在WEKA中,可以指定值是连续的还是离散的。

您可以将功能名称传递给树导出器方法:

with open("output.dot", "w") as output_file:
    tree.export_graphviz(clf, feature_names=vec.get_feature_names(),
                         out_file=output_file)
分类器本身不知道数据的“含义”,它只处理连续的数值,因此需要使用矢量器将分类变量热编码为二进制变量,可以安全地视为范围内的连续变量
[0,1]
所有实际值要么为0,要么为1,两者之间没有任何值


要了解DictVectorizer如何进行一次热编码,请查看文档中的。

在导出图形时,请指定特征名称,在本例中,这些名称是自变量数据帧的列名

这将在输出文件中生成列名称,如下所示

model = clf.fit(X, y)

dot_data = tree.export_graphviz(model, out_file=None, feature_names=X.columns.values.tolist(), class_names = None, filled=True, rounded=True, special_characters=True)

with open("output.dot", "w") as output_file:
    output_file.write(dot_data)

没错。我知道
weka
,并尝试了一段时间,但我认为Python会更乐于学习。例如,
FEATURE\u 1
有三个可能的值
A
B
C
,它们依次被向量化为
0,0
0,1
。我想在图上显示的是
FEATURE_1==A
而不是
X[1]X中的元素是否比features的数量多?如果特征有三个可能的值,那么它相当于0,1,2-为什么你需要向量呢?我相信是的,这就是向量化的目的。特征的数量是4,矢量化数组有11个元素。好的,我明白了,因此X[1]是特征向量的元素,因此根本不对应于特定特征,而是对应于特征的几个可能值。准确地说,
X[1]
X[2]
一起表示功能1的三个可能值。
X
中的每个元素(以及
X
中的另一个元素)将只显示一个功能。我们可能希望有朝一日将分类变量的其他处理添加到
DV
——这个问题似乎到处都会出现。将字符串功能值转换为整数代码,而不是结果矩阵中的单独功能/列。也就是说,不做K中的一个@ogrisel我们可以使用SKlearn创建ID3吗?我在ID3决策树的手册中找不到ID3决策树的示例。sklearn trees实现购物车,请参阅: