统计机器学习07:决策树DecisionTree
基本概念
决策树(Decision Tree)实际上是通过树形的结构来进行分类或者回归,在分类问题中可以根据样本的不同特征属性的不同属性值来进行多次分类的决策最终确定输入样本的类别,也就相当于执行了一连串嵌套的if-else语句,也可以被认为是定义在特征空间和类空间上的条件概率分布。决策树的优点是模型具有较好的可读性,分类的速度比较快。
决策树中有一系列节点和有向边,节点又分为内部节点和也节点,内部节点表示一个特征或者属性,叶节点表示一种类别。
决策树模型的建立
决策树主要依靠训练数据,采取损失函数最小化的原则来建立决策树模型,分为特征选择、决策树的生成和剪枝三个步骤。建立决策树的过程用的特点主要有:
采用递归的方法构建决策树
当所有的样本都属于同一类或者在这一层已经对所有的特征都进行了分类,决策树的建立就停止
在决策树的每一层选取一个最优的特征并用这个特征来进行分类,这也是决策树算法最关键的地方
一般而言我们希望,随着划分过程的不断进行,决策树的分支节点所包含的样本尽可能属于同一类别,也就是节点的纯度越来越高
因为决策树考虑到了样本中的所有点,对所有的样本点都有正确的分类,因此决策树的bias实际上是0,因此评价一棵树的主要标准是variance,一般来说规模比较小的决策树的performance更好。
最优特征的选取
上面已经说到决策树构建的最重要的部分就是在每一层选择合适的特征来进行划分,常见的算法有熵、信息增益等等。
信息熵Entropy
熵可以用来表示随机变量的不确定性。如果X是一个取值个数为有限个值即
信息增益
信息增益(information gain)表示已经知道特征X的信息而使得类Y的信息的不确定度减少的程度。特征A对于数据集D的信息增益
假设训练的数据集是
信息增益比
以信息增益作为数据集划分依据的时候,容易偏向于选择取值更多的特征作为分类标准,但是使用信息增益比,可以校正这一偏差,信息增益比是当前数据集D关于特征A的信息增益和自身的熵的比值,即:
基尼指数
基尼指数是另一种决策树的评价标准,对于分类问题,假设样本集合中有K中不同的类别,每类出现的概率为
决策树的剪枝与生成
ID3算法
ID3算法的核心是在决策树的各个节点上用信息增益Information Gain来进行特征的选择,并且递归地建立决策树:
从根结点开始,对于当前节点计算所有可能的特征值的信息增益,选择信息增益最大的特征作为划分的依据并建立子节点
直到所有的特征的信息增益都很小或者没有子节点位置停止调用
C4.5算法
和ID3算法类似,但是采用信息增益比作为选择的特征,其他的好像区别不是很大,但实际上决策树的代码实现应该是一系列统计学习的算法中难度比较大的,因为决策树需要使用树的数据结构,相比于其他算法的一系列矩阵计算在coding的过程中可能会有更大的麻烦。
决策树的剪枝Pruning
我们要明白决策树实际上是一种基于大量统计样本的贪心算法(仅根据个人理解,不代表任何工人观点),在选定了一个决策标准(信息熵,信息增益,信息增益比等等)之后,就需要根据训练集来构建一棵决策树,构建的策略就是在每一次作出决策的时候(对应到树中就是产生了一系列子节点)都会依照给定的标准,计算每种特征相对于给定标准的值,然后选择当前区分度最大,也就是最优的特征作为当前层的决策依据。
但是这样一来,生成的决策树的复杂度可能是非常高的,因此我们应该想办法对这个决策树进行一定的简化,也就是进行剪枝,决策树的剪枝往往通过极小化决策树整体的损失函数或者代价函数来实现。设决策树T的每个叶节点t有
这里就不得不提一个冷知识:完整的决策树在训练的过程中分类的误差是0,也就是说不做任何剪枝处理的决策树对训练集的分类是一定准确的。
这也很好理解,因为决策树在构建的过程中并没有舍弃掉一些小概率的样本,而是对其如实进行了分类,虽然最后构建出来的决策树可能非常复杂但是在构建的时候因为我们的策略是贪心的,所以一定会把训练集上的样本分类到对应的叶节点上。
换句话说不剪枝的决策树的bias是0,而variance往往比较大,未剪枝的决策树在训练集上表现很好而在测试集上可能不尽人意,因此我们需要通过剪枝使得决策树可以更好地适应测试集,换句话说,剪枝可以降低决策树模型的variance
剪枝过程是一个从底部向上的递归过程,首先需要计算每个节点的经验熵,如果剪掉某一段子树之后损失函数比剪掉之前更小,就进行剪枝,将父节点作为新的叶节点,重复下去直到不能继续为止。
CART算法
CART的定义
CART算法是Classification And Regression Tree(分类与回归树)的简称,从字面意思就可以看出来这种决策树既可以用于分类,也可以用于回归。
CART树的一个基本假设就是决策树都是二叉树,决策的结果只有是与否两种,这等价于递归地二分每个特征, 将输入空间划分成优先个但愿,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布
CART算法由生成和剪枝两个部分组成,对于生成的决策树希望它尽可能要大,剪枝的时候使用验证数据集来选择最优子树,这时候用损失函数最小作为剪枝的标准
回归树的生成
回归树对应的是输入空间的一个划分和输出值的映射关系,假如说输入的空间被划分成了M个单元
分类树的生成
CART的分类树用基尼指数作为衡量集合不确定性的标准,因为CART默认采用的都是二分类,因此基尼指数可以定义成: