周末在完成教授的一个课堂作业。作业的内容如下,最后两点要求使用出现在决策树节点的特征组成新的数据集然后用于 MLP 进行分类。

由于数据集给的是 .txt 文件,处理成 Excel 有些麻烦,因此就没有使用 Rapid Miner 来完成作业了。直接使用 Python 处理。作业中 2-2)的要求开始有些麻烦,没有头绪。在网上搜索了很久也没有找到类似的作业。最后,在查看 sklearn 决策树文档之后,有了解题思路。
首先,训练完决策树模型后,import graphviz
将训练的模型转换成决策树图,同时也会生成一个包含决策树信息的文件。如下代码所示:
# Export a graph of Decision Tree
import graphviz
dot_data = tree.export_graphviz(clf_dt, out_file=None,
class_names = labels_names,node_ids=True,
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph.render('dt') # save as a pdf file
运行完代码后,会生成一个 dt.pdf 文件,同时也会生成一个 ‘dt’ 文件。dt.pdf 文件里面是决策树的图片,如下所示。需要注意的是,如果希望决策树模型的图片中出现 class
信息,则在需要在代码中设置 class_names = label_names
。label_names
主要依据自己的数据集来设置,我的是手写数字识别的数据集,所以 label_names = np.array(['0','1','2','3','4','5','6','7','8','9'])
。

而 ‘dt’ 文件会包含决策树模型的所有信息,如下所示。其中 value
就是该节点的特征,class
就是该节点的标签。最后只要处理这个文件,提取出 value
和 class
就能够组成新的数据集。

最后,将提取后的数据进行可视化,可以发现,提取的特征就是 one-hot 向量,如下所示:

整个作业的代码可以查看: caoqi95/Digit_Recognition
网友评论