携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
决策树(Decision tree)算法是机器学习算法中的一种。决策树使用一系列的if-else规则作为判断边界,找出数据中的规律,从而做出预测。
决策树是一种很容易理解的算法,即使不懂机器学习和数学知识,也能了解决策树是怎么工作的。
如果要做一个类比的话,它跟综艺节目中猜人名的游戏很类似。游戏中甲乙双方,又一个提前准备好的人名作为答案,甲向乙提问,乙回答是或者不是,通过多次提问,甲不断缩小正确答案的范围,猜出正确的人名。
决策树也是这样,通过一个二元问题将数据集分组,然后再对已分组的数据进行同样的操作,最终预测数据的分类。这些问题和可能的答案,构成了一个树状的结构,这也是决策树名字的由来。
接下来我们要做的就是构建一棵这样的可以帮我们预测分类的树。
生成决策树
再归纳一下决策树的原理:首先根据一个二元问题,把数据分成相似性更高的两个组,然后针对每组数据在执行相同的操作。每一层叶节点的数据都比上一层数据量更少,相似性更高。
了解了这个原理,就知道了怎么去构建决策树,这其实是一个递归拆分的过程,因此,有两个问题,还需要我们解决:
- 如何设计这些用来拆分数据的二元问题?
- 递归在什么情况下终止?
首先是问题的选择,其实就是选择一个特征来划分当前的数据集,这里划分的目的是让无序的数据变得更加有序。这里需要引入一个信息论的概念,叫做信息增益。信息增益就是划分数据集前后信息发生的变化,使用某个特征划分数据之后获得的信息增益越大,那么这个特征就是更好的选择。
至于如何计算信息增益,不在本文讨论范畴之内,这里不做介绍,感兴趣可以查维基百科。
其次就是终止条件的选择,任何递归运算都需要终止条件,这样才不会无休止地对数据集进行分组。在决策树中,终止条件通常是,分组中数据点的个数低于某个阈值,或者分组中数据点的相似性达到了要求。
总结
决策树是通过一些列的二元问题进行分类预测的算法,基于它的特点,决策树的模型是非常易于即使和理解的。当然,它也有它的局限性,比如,数据的细微变化和二元问题的选择,对最终生成的决策树影响都非常大,如果过于追求最佳拆分方法,很容易导致过拟合的问题。