Datawhale学习笔记——决策树

173 阅读3分钟

不知道大家是否玩过机器人猜词的游戏,机器人会进行提问,我们根据问题选择:是或者否,在数回合后,机器人就会给出自己的判断,而且往往准确率想当的高。那么,让我们深挖一下,机器人提问的过程到底是什么样的?所提问题的依据是什么?机器人事先如何学习这些知识……

设想一下走在大街上,我们看到了一家店,这时候就会有如下的抉择:如果下雨了,那么就进店躲躲雨顺便吃顿饭;如果没下雨,天气晴朗又饿,就进去吃顿饭;如果不饿,就继续逛街。我们发现,这个过程可以用一棵树来表示。在树中有两个个分叉点,分别对应饿不饿和下不下雨。按照从树顶到树底的分叉选择,我们可以进行最后的决策,所以这种树被称为决策树。显然,决策树的使用就是从上到下,按照决策节点选择对应的分支,直到抵到某个最终决策。

抽象点讲,决策树常常用于进行分类,决策节点对应某些属性,根据属性的取值,最终叶子节点能把该实例归为某一类。

那么,如何构建这么一颗决策树?首先,我们先假设数据中所有的属性都是离散的,想要进行分类,我们需要的是获得更多关于类别的信息,也就是说,决策节点决策后得到的子节点包含的类别信息,应该比决策前的信息丰富,这被称为信息熵变化,信息的丰富度由信息熵来衡量。那么,很容易想得到,在选择当前的决策节点的属性时,使用具有最大的信息熵减的属性是比较好的一种办法。同样的,还有其他属性选择方法:信息熵增率等

此外,还有几个问题尚未解决:

1. 对于连续的属性要怎么处理?我们前面假定了所有属性都是离散的,事实上,现实中的数据大多数是连续的,这时候我们往往这样处理:按照训练集中的数据,选择合适的切割点,用大小关系来切割数据。此外,对于连续属性来说,可以被反复决策,作为同一路径上的多个决策点的决策属性。

2. 决策树的性能如何?通过构建决策树的过程,很容易发现这是一个极易过拟合的算法,因为每个实例都可以通过精确的分割百分比对应于训练数据,而这显然是不太合理的,这里有几个简单的优化技巧:限定叶子结点的最小数据量;限定能进行切割的最小数据量;限制树的高度。