python - 如何让Python决策树更容易理解?

标签 python tree scikit-learn data-analysis

我有一个数据文件。数据的最后一列具有 +1 和 -1 区分变量。我还在单独的文件中提供了每列的 ID 名称。

例如

1 2 3 4 1
5 6 7 8 1
9 1 2 3 -1
4 5 6 7 -1
8 9 1 2 -1

对于每一列,我分别有 Q1、Q2、Q3、Q4、Q5 名称。

我想实现决策树分类器,所以我编写了以下代码:

import numpy
from sklearn import tree

print('Reading data from ' + fileName);
data = numpy.loadtxt(fileName);
print('Getting ids from ', idFile)
idArray = numpy.genfromtxt('cleanedID.csv', dtype='str')

print('Adding ids')
print('data dimensions: ', data.shape)
print('idArray dimensions: ', idArray.shape)
data = numpy.append(idArray, data, axis = 0)


y = data[:,-1]
x = data[:, 1:-1]

classifier = tree.DecisionTreeClassifier(max_depth = depth)
classifier = classifier.fit(x, y)

with open('graph.dot', 'w') as file:
    tree.export_graphviz(classifier, out_file = file)

file.close()

我使用 graphviz 将 .dot 文件转换为 .png 文件。

问题是决策树看起来像这样: enter image description here

我不明白 X[number] 的含义。我搜索并发现 value = [5 0] 意味着类 5 有 0 个对象,类 0 有 5 个对象,但我只有 +1 和 -1 区分变量。无论如何,我是否可以调整这个决策树,以便我可以在决策 TreeMap 片中看到列名称(Q1、Q2、Q3...),以便我能够理解这意味着什么?

谢谢

最佳答案

Value = [5 0]表示第一类有 5 名成员,第二类有 0 名成员。对于你来说,类(class)顺序可能是 [-1 1] .

关于列名:正如yangjie指出的,X[158]表示第 159 列(零索引)。该规则已经明确说明:X[168]<=1.5意味着对于给定的行,树根据第 168 列的值以及它与 1.5 的比较来决定是向左还是向右。

您可以使用 feature_names 添加列名称export_graphviz 的可选参数

关于python - 如何让Python决策树更容易理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31786347/

相关文章:

c - 如何在C中找到一棵特里树的高度

Python Sklearn : Understanding of d-tree Output for Categorical Variable

python-2.7 - Tensorboard 记录非张量 (numpy) 信息 (AUC)

python - 如何计算列中使用的前 3 个单词并将结果存储在字典中

python - 索引映射时不支持 Elasticsearch 字段数据

python - 如何在numpy中返回所有最小索引

ruby-on-rails - 我如何选择包含他们的 child 的分类单元 - Spree 电子商务(Ruby on Rails)

algorithm - 特殊的二叉树,一个棘手的问题?

python - 如何按组标准化 scikit learn?

python - 与 python 方法中的 self 参数混淆(不属于任何类的方法)