机器学习 | 决策树及若干基础问题

机器学习 | 决策树及若干基础问题


决策树

1.构造决策树

学习决策树就是学习一系列if/else问题,是我们能够以最快的速度得到正确答案。在机器学习中,这些问题叫作测试(测试集是用来测试模型泛化性能的数据)。数据通常表示为连续特征,而非二元特征。用于连续数据的测试形式是:“特征 i i i的值是否大于 a a a?”。
其中顶节点(也叫根节点表示整个数据集)。

对数据反复进行划分,直到划分后的每个区域(决策树的每个叶节点)只保护单一目标值(单一类别或单一回归值)。如果树中某个叶节点所包含数据点的目标值都相同,那么这个叶节点就是纯的(pure)。
想要对新数据点进行预测,首先要查看这个点位于特征空间划分的哪个区域,然后将该区域的多数目标值(如果是纯的叶节点,就是单一目标值)作为预测结果。
决策树也可用于回归任务,使用的方法完全相同。预测的方法是, 基于每个节点的测试对树进行遍历,最终找到新数据点所属的叶节点。这一数据点的输出即为此叶节点中所有训练点的平均目标。

2.控制决策树的复杂度

通常来说,构造决策树知道所有叶节点都是纯的叶节点会导致模型非常复杂。并且对训练数据高度过拟合。纯叶节点的存在说明这棵树在训练集上的精度是100%。
防止过拟合有两种常见的策略:一种是及早停止树的生长,也叫预剪枝(pre-pruning);另一种是先构造树,但随后删除或折叠信息量很少的结点,也叫后剪枝(post-pruning)或剪枝(pruning)。预剪枝的限制条件可能包括限制树的最大深度、限制叶结点的最大数目,或者规定一个结点中数据点的最小数目来防止继续划分。
scikit-learn的决策树在DecisonTreeRegressor类和DecisonTreeClassifier类中实现。scikit-learn只实现了预剪枝,没有实现后剪枝。
如果我们不限制决策树的深度,它的深度和复杂度都可以变得特别大。因此,未剪枝的树容易过拟合,对新数据的泛化性能不佳。现在我们将预剪枝应用在决策树上,这可以在完美拟合训练数据之前阻止树的展开。一种选择是在到达一定深度后停止树的展开。我们在这里设置参数max depth限制树的深度可以减少过拟合。这会降低训练集的精度,但可以提高测试集的精度

3.分析决策树

我们可以使用tree模块的export graphviz函数来将树可视化。这个函数会生成一个.dot格式的文件,这是一种用于保存图形的文本文件格式。
每个结点的samples给出了该结点中的样本个数,value给出的是每个类别的样本个数。

4.树的特征重要性

我们使用一些有用的属性来总结树的工作原理,其中最常用的是特征重要性(feature importance),它为每个特征对树的决策的重要性进行排序。对于每个特征来说,它都是一个介于0和1之间的数字,其中0表示“根本没用到”,1表示“完美预测目标值”,特征重要性的求和始终为1。

但在将基于树的模型用于回归时,我们想要指出它的一个特殊性质。DecisionTreeRegressor(以及其他所有基于树的回归模型)不能外推(extrapolate),也不能在训练数据范围之外进行预测。一旦输入超出了模型训练数据的范围,模型就只能持续预测最后一个已知数据点。树不能在训练数据的范围之外生成“新的”响应。所有基于树的模型都有这个缺点。
实际上,利用基于树的模型可以做出非常好的预测(比如试图预测价格会上涨还是下跌。)注意《Python机器学习基础教程》中的例子的目的并不是要说明对时间序列来说树是一个不好的模型,而是为了说明树在预测方式上的特殊性质。

5.优点、缺点和参数

如前所述,控制决策树模型复杂度的参数是预剪枝参数,它在树完全展开之前停止树的构造。通常来说,选择一种预剪枝策略(设置max depth、max leaf nodes或min samples leaf)足以防止过拟合。
与其他许多算法相比,决策树有两个优点:一是得到的模型很容易可视化,非专家也很容易理解(至少对于较小的树而言);二是算法完全不受数据缩放的影响。由于每个特征被单独处理,而且数据的划分也不依赖于缩放,因此决策树算法不需要特征预处理,比如归一化或标准化。特别是特征的尺度完全不一样时或者二元特征和连续特征同时存在时,决策树的效果很好。
决策树的主要缺点在于,即使做了预剪枝,它也经常会过拟合,泛化性能很差。


6个相关基础问题

1. ID3、C4.5、CART三类决策树的原理和异同点

ID3选择最佳分割点是基于信息增益的,信息增益越大,表示用这个属性进行节点划分所获得的“纯度提升”越大。
同时ID3的缺点也十分明显,某一个子集中特征数目越多,相应的这个子集的信息增益就越大,即使这个子集每个特征只有一个样本数据。
这样的后果就是构造出来的数泛化能力较弱,模型的评估效果不佳。

C4.5对ID3进行了改进,C4.5采用信息增益率来选择属性,也就是针对子集相应地增加一个权重系数,这样可以避免在选择子集的时候选择特征多而每个特征的样本数量少的现象,但是信息增益率又会使得模型偏向于选择特征少的现象。
所以C4.5算法则先从子集中选择信息增益高于平均水平的特征,进一步选择增益率最高的特征。

选择信息增益高于平均水平的特征是因为信息增益高于平均水平会过滤掉取值数目少的属性(即信息增益率高的属性)

更多的,C4.5也克服了ID3不能处理连续型变量和缺失值两个缺点。
C4.5算法构造的决策树只能进行分类任务,而CART树既可以做分类,也可以做回归

CART树本质上是对特征空间进行二元划分,所以CART算法生成的树是一棵二叉树,且可以对类别行变量和数值型变量进行分裂。

对分类别变量进行分类时,分为等于该属性和不等于该属性;在对连续型变量进行划分时,分为大于和小于。所以CART树做分类的时候用GINI系数作为划分标准,在做回归的时候用的是均方误差

2. 分类树和回归树的区别是什么?

分类树以ID3为例,在对一个特征进行划分时,首先是穷举这个特征的每一个阈值,找到使得 特征 ≤ \leq 阈值 和 特征 > > > 阈值 的两个分支的熵的最大值,按照该标准分支得到两个新的节点。用同样的方法继续分支,直到得到种类唯一的叶子节点,或者达到预设的终止条件为止。

回归树的流程类似于分类树,不同的是回归树采用的是均方误差作为划分标准。回归树会尽可能的寻找最小化均方误差,即预测值和实际值的误差最小,且越小则越有可能作为新的节点。

3. 决策树对于缺失值的处理

开始选择属性来划分数据集时,样本在某几个属性上有缺失时的处理:

  • 忽略缺失样本
  • 使用相应地填充方法对缺失值进行填充
  • 计算信息增益率时根据缺失率的大小对信息增益率进行打折。例如计算某个属性的信息增益率,若属性的缺失率为0.8,则将信息增益率乘以0.8作为最终的信息增益率

属性已经被选择,在决定分割点的时候,有些样本在这个样本上有缺失时的处理:

  • 忽略缺失样本
  • 使用相应的填充方法对缺失值进行填充
  • 将缺失值分配到每个子集中,即每个子集上都有缺失的样本
  • 将缺失样本归为一个分支

决策树模型构建好后,测试集上的某些属性是缺失时的处理:

  • 如果存在单独的缺失值分支,则依据此分支使用相应的填充方法对缺失值进行填充(常用众数进行填充)
  • 正常进行分类,直到缺失数据的节点停止,选择该节点的众数的叶子节点(即发生概率最高的类)作为最终分类

4. 决策树模型为什么不需要进行数据归一化

决策树是一种概率模型,它不关心变量的值,只关心变量的分布和变量之间的条件概率。所以对数值进行归一化并不会影响分裂节点的位置。

5.决策树过拟合应该如何优化

决策树过拟合可以通过预剪枝和后剪枝进行优化

预剪枝:通过提前停止树的构造而对树剪枝,是目前解决过拟合的主要方法。常用的剪枝条件包括限制树的深度、限制叶节点最小样本数、限制叶节点的最小样本权重、限制叶节点的信息增益值的阈值等。

后剪枝:首先构造完整的决策树,并允许构造的树过度拟合数据,然后通过自底向上的方式对非叶节点继续考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。

6.决策树的优缺点

优点

  • 易于理解,决策树的if then结构可以很好解释
  • 相对于逻辑回归对数据的预处理,决策树不需要进行特征归一化和缺失值处理
  • 决策树模型的效果较好,且可进一步使用集成树模型进行建模评估

缺点

  • 容易生成较复杂的树结构,造成过拟合
  • 不适合处理高维度数据,当特征的数量过大时,决策树模型将难以适用(可使用集成树模型进行优化),而且往往很难抛出结果。
  • 模型的泛化能力比较差,对于没有出现过的值不知道如何处理(可以预先进行分箱操作)。


    来源于《Python机器学习基础教程》
    https://mp.weixin.qq.com/s/kTg4Lbdp_3AYAy0guuNlpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值