机器学习与数据科学决策树指南

2019 年 1 月 5 日 云栖社区

云栖君导读:一份关于决策树的基本介绍,用实例说明详细讲解。


还在为如何抉择而感到纠结吗?快采用决策树(Decision Tree)算法帮你做出决定吧。决策树是一类非常强大的机器学习模型,具有高度可解释的同时,在许多任务中也有很高的精度。决策树在机器学习模型领域的特殊之处在于其信息表示的很清楚,而不像一些机器学习方法是个黑匣子,这是因为决策树通过训练学到的“知识”直接形成层次结构,该结构以这样的方式保存和显示学到的知识,即使是非专业人士也可以容易地弄明白。



现实生活中的决策树


在现实生活中,我们常常用过类似于决策树的方式来决定自己的生活。例如,决定周末安排什么样的活动。采取怎样的活动可能取决于一些因素,比如是否愿意和朋友一起出去或独自度过周末、周末的天气如何等。假设就这两个因素影响你做出决定的话,如果天气晴朗,并且你的朋友可以一起参与,那么你可能想踢足球。如果是下雨天,可能会一起去看电影。如果朋友有事无法参加,那么无论天气如何,可能会去看会书、玩会电子游戏。



这就是现实中的一个明显的决策树例子,上述已经构建了一个树来模拟一组顺序的、层次化的决策,最终得到一个结果。这里,为了保持树的小巧,还选择了相当“高级”的决策。例如,如果为天气设置了许多可能的选项,例如晴天(25度)、下雨(25度)、晴天(26度)、下雨(26度)、晴天(27度)...... 等等,这样会使得树尺寸会很大,这种精确的温度对于最后做出的决策没有太相关的关系,因为只是想知道是外界是否下雨,根据下雨的情况决定是否外出,而温度的高低对其影响很小。当然,极寒极热天气还是在家比较舒服。


机器学习中的决策树的概念和上面的思想是相同的,需要构建一个具有一组分层决策的树,最终给出决策结果,即分类或回归预测。尽可能使得决策树尺寸较小,同时要实现高分类/回归准确性。


机器学习中的决策树


决策树模型的构建一般分为两个步骤:归纳(induction)和修剪(pruning)。归纳是实际构建树的步骤,即根据我们的数据设置所有的分层决策边界。但由于训练决策树的性质,树模型可能容易出现严重的过拟合现象。这个时候就需要采用修剪处理,修剪就是从决策树中删除不必要的分支结构的过程,有效地降低了对抗过拟合的复杂性,并使其更容易解释。


归纳|Induction


从高层次来看,决策树归纳需要经过4个主要步骤:


  • 训练数据集应具有一些特征变量、分类或回归输出;

  • 确定数据集中的“最佳特征”以分割数据;

  • 将数据拆分为包含此最佳特征的可能值的子集,这种分裂基本上定义了树上的节点,即每个节点是基于数据中的某个特征的分裂点;

  • 使用从步骤3创建的数据子集递归地生成新的树节点,保持分裂直到达到一个优化点,在该点已经通过某种度量优化了最大精度,同时最小化了分裂/节点的数量。

       

第1步很简单,只需好好分析数据集。对于步骤2,通常使用贪婪算法来选择要使用的特征和特定分割,以最小化代价函数。构建决策树时执行的拆分相当于划分特征空间。我们将迭代地尝试不同的分割点,最后选择成本最低的分割点。也可以只在数据集中的值范围内进行拆分,这将使得我们免于浪费计算来测试那些表现差的分裂点。


对于回归树,可以使用简单的平方误差作为模型的代价函数:



其中,Y是期望输出,Y-hat是预测值,对数据集中的所有样本求和以获得总误差。对于分类,使用的是基尼指数函数(Gini Index Function):



 其中pk是特定预测节点中第k类的训练实例样本的比例。理想情况下, 节点的错误值应为零,这意味着每个拆分输出的类正是我们想要的,一旦到达那个特定的决策节点,无论处于决策边界的这一边还是另一边,其输出也确定好了。


在数据集中具有单个分类的概念被称为信息增益。以下是举例:



如果选择了某种划分,其中每个输出根据输入数据混合类别,这种情况实际上根本没有获得任何信息; 另一方面,如果采取的分割对于每个输出的类的正确率都很高,那么已经获得  了在具体特征变量上以特定方式分割的信息。


之后是对树模型进行分裂,直到树有数千个分支,但这不是一个好主意!这样得到的决策树将是巨大的、缓慢的,并且会过拟合训练数据集。因此,需要设置一些预定义的停止标准来停止树的构造。


最常见的停止方法是对分配给每个叶节点的训练样本的数量使用最小数量。如果计数小于某个最小值,则不接受拆分,并将该节点作为最终叶节点。如果所有的叶子节点都成为最终节点,则训练停止。较小的最小数量将提供更精细的分割和信息,但也容易过拟合训练数据。因此,最小数量的取值通常基于数据集设置,具体取决于每个类中预计有多少个示例样本。


修剪|Pruning


由于训练决策树的性质,可能容易会出现严重的过拟合现象。为每个节点设置最小实例数的正确值可能具有挑战性。大多数情况下,可能只是希望做出合适的决定,而无需最优的决定。因此,无需使得最小值非常小获得非常复杂的树,且有很多分裂是多余的,并没有提高模型的准确性。


树修剪是一种利用修剪树中不必要的分裂的技术。从上层开始,修剪将树的一部分从严格的决策边界压缩为更平滑、更通用的树,从而有效地降低树的复杂性。决策树的复杂性定义为树中的分裂数。


 一种简单而高效的修剪方法是遍历树中的每个节点,并评估将其移除后其代价函数上的效果。如果移除后,代价函数变化不大,那就修剪掉该节点。


实例实践


使用Scikit Lear中内置的函数来实现分类和回归的决策树是非常容易的。首先加载数据集并初始化决策树以进行分类。



Scikit.还允许使用graphviz库可视化构建的树,它附带了一些选项,这些选项将有助于可视化决策节点,并将模型学到的内容进行分割,下面根据特征名称对节点进行着色,并显示每个节点的类和特征信息:



也可以在Scikit Learn中为决策树模型设置几个参数。以下是一些有趣的尝试以获得更好的结果:


  • max_depth:树的最大深度,类似于深度神经网络中的最大层数。较浅会使得模型更快但不准确;更深的模型可能会使得准确性更高,但过拟合的风险也增大,且运行很慢;

  • min_samples_split: 拆分节点所需的最小样本数, 将其设置为合适的值将有助于减轻过拟合;

  • max_features:查找最佳拆分时要考虑的特征数,更高可能意味着更好的结果,但训练也需要更长的时间;

  • min_impurity_split:树生长早期停止的阈值,如果节点的杂质高于阈值,则该节点将分裂,可用于权衡对抗过拟合(高值、小树)与高精度(低值、大树);

  • presort:是否预先分配数据以加快拟合中最佳分割的发现。如果事先对每个特征的数据进行排序,训练算法将更容易找到合适的分裂值;


实际中应用决策树的技巧


以下是决策树的优缺点总结,可以帮助读者确定它是否适合各自的问题,以及有关如何有效应用它们的一些提示:


优点| Pros


  • 易于理解和解释:在每个节点都能够确切地看到模型做出了什么决定。在实践中,能够完全理解准确度和误差来自何处,模型可以很好地处理哪种类型的数据,以及输出如何受到特征值的影响。Scikit learn的可视化工具是可视化和理解决策树的绝佳选择;

  • 需要准备很少的数据:许多机器学习模型可能需要大量的数据预处理,例如归一化,并且可能需要复杂的正则化方案。另一方面,在调整了一些参数后,决策树可以很好地做到开箱即用;

  • 使用树进行推理的计算成本与训练树的数据集呈对数关系,这是一个巨大的优势,意味着输入更多的数据不一定会对推理速度产生巨大的影响;


缺点|Cons


  • 由于训练的性质,过拟合在决策树中很常见。通常建议执行某种类型的降维,例如PCA, 以便树不必学习如此多的特征上的拆分;

  • 出于与过拟合情况类似的原因,决策树也容易变得偏向于在数据集中占多数的类别,对不平衡数据进行某种类平衡(例如类权重、采样或专门的损失函数)操作是一个不错的主意。


作者信息


George Seif,机器学习和深度学习
本文由阿里云云栖社区组织翻译。
文章原标题《A Guide to Decision Trees for Machine Learning and Data Science》,译者:海棠,审校:Uncle_LLD。



end

阿里云宣布进入 Serverless 容器时代,推出弹性容器实例服务 ECI

阿里巴巴达摩院发布2019十大科技趋势:语音AI在特定领域通过图灵测试

阿里研究员谷朴:API 设计最佳实践的思考

阿里巴巴AI夺肝结节诊断两项世界冠军,至今无人超越

更多精彩

登录查看更多
1

相关内容

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。 分类树(决策树)是一种十分常用的分类方法。他是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
126+阅读 · 2020年3月15日
机器学习速查手册,135页pdf
专知会员服务
336+阅读 · 2020年3月15日
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
347+阅读 · 2020年2月15日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
【机器学习课程】机器学习中的常识性问题
专知会员服务
72+阅读 · 2019年12月2日
一文读懂机器学习模型的选择与取舍
DBAplus社群
13+阅读 · 2019年8月25日
AI从业者必须了解的决策树指南
AI前线
7+阅读 · 2019年1月14日
【干货】数据科学与机器学习面试指南
机器学习算法与Python学习
8+阅读 · 2018年8月15日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
已删除
将门创投
3+阅读 · 2018年4月10日
机器学习面试题精讲(一)
七月在线实验室
4+阅读 · 2018年1月11日
入坑机器学习,十个知识点你不得不知
人工智能头条
7+阅读 · 2017年9月15日
机器学习算法实践:决策树 (Decision Tree)
Python开发者
9+阅读 · 2017年7月17日
Arxiv
7+阅读 · 2019年4月8日
Adaptive Neural Trees
Arxiv
4+阅读 · 2018年12月10日
Arxiv
8+阅读 · 2018年11月21日
Arxiv
3+阅读 · 2018年10月11日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
Relational Deep Reinforcement Learning
Arxiv
10+阅读 · 2018年6月28日
VIP会员
相关VIP内容
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
126+阅读 · 2020年3月15日
机器学习速查手册,135页pdf
专知会员服务
336+阅读 · 2020年3月15日
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
347+阅读 · 2020年2月15日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
【机器学习课程】机器学习中的常识性问题
专知会员服务
72+阅读 · 2019年12月2日
相关资讯
一文读懂机器学习模型的选择与取舍
DBAplus社群
13+阅读 · 2019年8月25日
AI从业者必须了解的决策树指南
AI前线
7+阅读 · 2019年1月14日
【干货】数据科学与机器学习面试指南
机器学习算法与Python学习
8+阅读 · 2018年8月15日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
已删除
将门创投
3+阅读 · 2018年4月10日
机器学习面试题精讲(一)
七月在线实验室
4+阅读 · 2018年1月11日
入坑机器学习,十个知识点你不得不知
人工智能头条
7+阅读 · 2017年9月15日
机器学习算法实践:决策树 (Decision Tree)
Python开发者
9+阅读 · 2017年7月17日
相关论文
Top
微信扫码咨询专知VIP会员