《机器学习》--决策树(上)

一、决策树的基本概念
决策树(decision tree)是一类常见的机器学习方法。决策树是基于树结构来进行决策的。一般的一颗决策树包含一个根节点、若干个内部节点和若干个叶节点;叶节点对应于决策结果,其他每个节点则对应于一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集。
决策树基本算法:

输入训练集D={(x1,y1),(x2,y2),…(xm,ym)};
属性集A={a1,a2,…ad}.
过程:函数TreeGenerate(D,A)
1.生成结点node;
2.if D中样本全属于同一类别C:
    将node标记为C类叶结点;
    递归返回;
end if
3.if A=空集 或 D中样本在A上取值相同:
    将node标记为D中样本数(当前结点)最多的类(成为叶结点);
    递归返回;
end if
4.从A中选择最优划分属性a*:
  a*=argmax Gain(D,a)
  [最大化信息增益,偏好可取值数目较多的属性 ]
  a*=argmax Gain_ratio(D,a)
  [ 最大化信息增益率,偏好可取值数目较少的属性]
  a*=argmin Gini_index(D,a)
  [最小化基尼指数]
5.for a* 的每个值 a‘* do
  为node生成一个分支;令Dv表示D中在a*上取值为a’*的样本子集
  if Dv为空:
    将分支结点标记为D中样本数(父结点)最多的类(成为叶结点);
    递归返回;
  else
    以TreeGenerate(Dv,A{a*})为分支结点
  end if
end for
输出:以node为根结点的一棵决策树

决策树的构造是一个递归的过程,有三种情形会导致递归返回:(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

二、划分选择
基本算法中介绍了三种划分选择,其核心思想是我们希望在划分过程中,决策树的分支节点所包含的样本尽可能属于同一类别,即“纯度”越来越高。
1、ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上:越是小型的决策树越优于大的决策树。
ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。 其大致步骤为:
1.初始化特征集合和数据集合;
2.计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
3.更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
4.重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。
ID3 使用的分类标准是信息增益,它表示得知特征 A 的信息而使得样本集合不确定性减少的程度。


image.png

ID3的缺点:

  • ID3 没有剪枝策略,容易过拟合;

  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;

  • 只能用于处理离散分布的特征;

  • 没有考虑缺失值
    2、C4.5算法最大的特点是克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准。
    C4.5 相对于 ID3 的缺点对应有以下改进方式:

  • 引入悲观剪枝策略进行后剪枝;

  • 引入信息增益率作为划分标准;

  • 将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;

  • 对于缺失值的处理可以分为两个子问题:
    问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
    问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
    针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
    针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
    C4.5划分标准:


    image.png

    这里贴一个剪枝介绍:


    image.png

    C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。
    后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。
    C4.5缺点:
    剪枝策略可以再优化;
  • C4.5 用的是多叉树,用二叉树效率更高;

  • C4.5 只能用于分类;

  • C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;

  • C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行

3、CART:ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。
CART 包含的基本过程有分裂,剪枝和树选择。

  • 分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;

  • 剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;

  • 树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。
    CART 在 C4.5 的基础上进行了很多提升。

  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;

  • C4.5 只能分类,CART 既可以分类也可以回归;

  • CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;

  • CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;

  • CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。

CART划分标准:
熵模型拥有大量耗时的对数运算,基尼指数在简化模型的同时还保留了熵模型的优点。基尼指数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(率)正好相反。


image.png

image.png

基尼指数可以理解为熵模型的一阶泰勒展开。

模型对于缺失值的处理会分为两个子问题:

如何在特征值缺失的情况下进行划分特征的选择?
选定该划分特征,模型对于缺失该特征值的样本该进行怎样处理?
对于问题 1,CART 一开始严格要求分裂特征评估时只能使用在该特征上没有缺失值的那部分数据,在后续版本中,CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)。

对于问题 2,CART 算法的机制是为树的每个节点都找到代理分裂器,无论在训练数据上得到的树是否有缺失值都会这样做。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。

你可能感兴趣的:(《机器学习》--决策树(上))