决策树,顾名思义就是用树形结构来做决策。
如何把我们想达到的算法表达成一棵树
直接上例子,图源来自维基百科(titanic dataset):
决策树其实就是一个根据条件从上往下的判断流程,根据条件的是或否,分支成下一层的判断与决策。如果分支不再是一个判断条件,那么它就是一个决策。
从这个图我们可以看出feature(在这里面就是判断条件啦)的重要性,直接决定了你会走往哪个决策,性别,年龄,是否是sibsp,这些features共同决定了给定数据会通往哪个决策,survived or died。
决策树的分类
根据决策树给出的结果,我们可以把决策树分成分类决策树和回归决策树。
分类决策树:决策树得出的结果是不同的类别,比如可贷款和不可贷款
回归决策树:决策是对连续变量的预测,如预测房价
使用哪类决策树看你想解决什么样的问题,是分类还是回归。
决策树的构建算法有三种:
- ID3
- C4.5
- CART
构建算法名字有些奇怪,会在下篇文章介绍这三种构建算法,ID3是基本算法,后两种都是在ID3的基础上优化后的算法。
我们接下来举的例子都是用CART。
怎么构造决策树
主要有三个问题:
- 选什么特征来当条件
- 条件判断的属性值是什么?年龄 > 10? 还是年龄 > 15?
- 什么时候停止分裂,达到我们需要的决策
递归二叉分裂
我们有一堆特征,最直接的想法就是,我们都试一下然后看看谁效果好就选谁嘛。这里看谁效果好是用的损失函数来判断的。为什么这个方法的名字前面有递归二字呢,因为选好最好的特征进行二叉分裂后,对分裂的结果可以再进行相同的办法进行分裂(用损失函数判断哪个特征最适用)。
这其实就是贪心的思想,我们每一步都力求最好,让损失函数达到最低。
CART的损失函数思想
从上面的递归二叉分裂方法可以看出,损失函数在这个方法中起到了至关重要的作用。
首先明确一个想法,损失函数是想把差不多属性的数据弄到一个结点里的,换言之,就是我进行分裂之后,分裂出来的两个结点,我们希望他们的决策有比较鲜明的差异。比如决策结果为患病和不患病,选择特征进行分裂后,我们希望一边集中的是患病的结果,一边集中的是不患病的结果,这才是一个好的分类决策树。如果分裂完,你两边患病不患病都是五五开,那跟我们自己闭着眼睛进行分类有什么区别呢?
明确损失函数想干什么后,我们就可以来看看分类决策树和回归决策树的损失函数具体长什么样了。
分类树的损失函数
G=∑i(ps∗(1−ps)) G = \sum_ i (ps*(1-ps)) G=