边境的悍匪—机器学习实战:第六章 决策树

第六章 决策树


前言

前一章我们学习一个很强大的机器学习模型,支持向量机。这一章我们来继续学习下一个强大的模型,决策树。它同样支持分类和回归,多用于做分类任务,决策树也是会面会提到的随机森林的基础。决策树同样是在训练集中拟合一个模型,不同的是,如果在不做任何限制的情况下,决策树容易过拟合训练数据,并且每次产生模型是随机的。下面就让我们来开始学习吧。


一、思维导图

在这里插入图片描述

二、主要内容

1、训练和可视化决策树

  1. 决策树训练
    决策树的训练与其他模型的训练类似,都是在训练集上拟合出一个模型,不同的是决策树不再使用梯度下降、求解闭式方程那一套,而是使用特定的算法类分割数据集,从而实现预测。
  2. 决策树可视化
    决策树的可视化需要用到一些其他的库来辅助完成,例如:Graphviz。

2、做出预测

  1. 概念
    决策树预测的中心思想就是通过计算基尼不纯度或熵来分割训练集,最终训练出一个拟合训练集的决策树,用于泛化到新的实例。树的结构由使用的模型类与模型超参数决定。

3、估计类概率

  1. 概念
    分类决策树的输出一般为某一个分类,而不是输出分类的概率。如果想要输出为分类的概率,就需要根据特征找到分类的节点,再根据该节点所有子节点中每个分类的占比计算分类的概率。

4、CART训练算法

  1. 实现
    CART算法就是通过不停的迭代,最小化一个体现决策树节点纯度的成本函数,直到找到一个特征和阀值能够相对完美的分割数据集然后分割数据,继续在剩余的训练集中重复上述操作,直到得到了一个完美的决策树或者是到达了超参数设置的最大值,停止分割。
  2. 不足
    由于CART是贪婪算法,我们会得到一个相对还不错的模型,也仅限于还不错并不一定是最优,训练一棵最优树是一个相当棘手的问题,所以我们不得不接受我们得到的是一个还不错的模型。

5、计算复杂度

  1. 训练计算复杂度
    我们在训练一个决策树的时候需要遍历训练集的每一个实例每一个特征,所以训练的计算复杂度为O(m x n log2(m))。如果我们面对的是小训练集,那么我们在训练之前可以先对数据集进行排序,但如果是大训练集的话,会增加训练的时间。
  2. 预测计算复杂度
    由于在预测时候,我们每个节点值检查一个特征,所以预测是计算复杂度为O(log2(m)),复杂度与数据的特征数量无关。

6、基尼不纯度或熵

  1. 概念
    基尼不纯度与熵的本质是一样的,都是体现一个节点上的数据的纯度。在sklearn中我们可以使用不同的超参数来决定选择。
  2. 基尼不纯度与熵的选择
    在sklearn中默认的是选择基尼不纯度来分割数据集,因为相对于熵来说基尼不纯度的计算速度要相对快一点。当然我们也可以根据自己需求选择不同超参数,基尼不纯度倾向于分割常见类,而熵倾向于分割一个更加平衡的决策树。

7、正则化超参数

与其他模型类似并且比其他模型更严重的问题就是决策树容易过拟合训练集。我们两种办法来解决过拟合的问题。

  1. 添加超参数
    与其他模型一样,决策树同样可以通过添加超参数的方式来来正则化模型,例如:决策树的深度、每个节点树叶的数量等。
  2. 剪枝
    这是决策树特有的正则化方式,首先先拟合出一个完整的决策树,然后再对决策树进行剪枝处理,删除掉一些不必要的枝叶。

在这里插入图片描述
图1:不同超参数的决策树模型

8、回归

  1. 定义
    回归决策树与分类决策树类似,但是回归决策树不再是预测一个分类,而是预测一个值,这个值等于该节点所有子节点的平均值。算法要做的就是尽量拟合子节点的值接近预测值。
  2. 分割实例的依据
    CART算法与基础的决策树算法不同,不在是根据训练集的纯度来分割,而是根据最小化预测值与实例值的误差来分割数据。

9、不稳定性

  1. 概念
    决策树对于训练集细微的变化非常敏感,一旦数据集发生概念,就会得到一个截然不同的决策树。并且决策树本是也是随机的,在不设定随机值的情况下即使数据集不变,每次都会得到一棵不同的决策树。
  2. 解决办法
    对于这种随机的问题,之后会提到的随机森林就可以解决这一决策树的不稳定性。

三、课后练习

1.如果训练集有100万个实例,训练决策树(无约束)大致的深度是多少?
因为一个包含m节点的均衡二叉树的深度为log2(m),如果不加以限时的话,sklearn将会训练出每个节点一个实例二叉树,所以如果训练集有100万那么二叉树的深度将为log2(1000000)约等于20,一般情况下会比这个还多,因为决策树一般不会完全平衡。

2.通常来说,子节点的基尼不纯度是高于还是低于其父节点?是通常更高/更低?还是永远更高/更低?
通常来说,一个节点的基尼不纯度是低于他的父节点的,因为CART的分割计算算法就是使得一个节点的子节点的加权基尼不纯度低于父节点,但是也不是绝对的, 当两个子节点中两个节点的人基尼不纯度差别特别大时并且差别足以抵消掉与父节点的差距,那么就会出现子节点的基尼不纯度比父节点高的情况。

3.如果决策树过拟合训练集,减少max_depth是否为一个好主意?
是一个好主意,因为减少max_depath是添加了对模型的约束,从而解决对模型的过拟合。

4.如果决策树对训练集欠拟合,尝试缩放输入特征是否为一个好主意?
因为决策树本身不需要对特征进行缩放,所以不管是什么情况,在决策树中使用特征缩放都是浪费时间的行为。

5.如果在包含100万个实例的训练集上训练决策树需要一个小时,那么在包含1000万个实例的训练集上训练决策树,大概需要多长时间?
因为训练一个决策树的计算复杂度为O(n x m log2 (m))当把训练集扩大十倍,那么以K=(n×10m×log(10m))/(n×m×log(m))=10×log(10m)/log(m),如果m=1000000,那么K约等于11.7,需要11.7个小时。

6.如果训练集包含10万个实例,设presort=True可以加快训练吗?
只有在数据集少于1000的情况下添加presort=true才会是的训练变快,当数据集很大时,只会使得训练更慢。

四、总结

本章介绍的是一个新的机器学习模型,决策树。基本训练与预测流程与其他的模型相似,同样是通过训练集然后训练,但是也有几个特殊的地方。

  1. 训练方式:训练不再是使得某个函数收敛达到最优解,而是分割训练集获得一个用于决策的树。
  2. 支持分类:决策树分类的依据是一个节点上的所有示例中某个分类的数量占比。
  3. 支持回归:决策树回归的依据是一个节点上的预测值,预测值等于该节点所有子节点的平均值。
  4. 不稳定:决策时对于数据集细微的变化很敏感,并且决策树在不确定随机数的情况下每次会生成不同的随机数。

对文章有任何疑惑或者想要和博主一起学机器学习一起进步的朋友们可以添加 群号:666980220。需要机器学习实战电子版或是思维导图的也可以联系我。祝你好运!

项目地址: github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值