决策树完全指南(上)
2019年05月19日 由 sunlei 发表
191271
0
在最初的时候,学习机器学习(ML)可能是令人生畏的。“梯度下降”、“隐狄利克雷分配模型”或“卷积层”等术语会吓到很多人。但是也有一些友好的方法可以进入这个领域,我认为从决策树开始是一个明智的决定。
决策树(DTs)可能是目前最有用的监督学习算法之一。与无监督学习不同(无输出变量来指导学习过程,数据由算法探索以发现模式),在有监督学习中,现有数据已经被标记,并且您知道希望在获得的新数据中预测哪些行为。这是一种自动驾驶汽车用来识别行人和物体的算法,或者企业利用这种算法来估计客户的生命周期价值和他们的流失率。
在某种程度上,监督学习就像和老师一起学习,然后把这些知识应用到新的数据中。
DTs是一种ML算法,它根据一个描述性特征将数据集逐步划分为更小的数据组,直到它们达到足够小的数据集,可以用某个标签来描述。它们要求你有带标签的数据(带有一个或多个标签,比如植物图片中的植物名称),所以它们试图根据这些知识给新数据也贴上标签。
DTs算法非常适合解决分类(机器将数据分类为类,比如电子邮件是否是垃圾邮件)和回归(机器预测值,比如房产价格)问题。当因变量是连续的或定量的(例如,如果我们想估计客户拖欠贷款的概率),则使用回归树;当因变量是分类的或定性的(例如,如果我们想估计一个人的血型),则使用分类树。
DTs的重要性取决于它们在现实世界中有许多应用。作为ML中最常用的算法之一,它们被应用于多个行业的不同功能:
- DTs被用于医疗保健行业,以提高在早期发现认知障碍的阳性病例的筛查,并确定未来发展成某种类型痴呆症的主要危险因素。
- 索菲亚,那个成为沙特阿拉伯公民的机器人,她使用DTs算法与人类聊天。事实上,使用这些算法的聊天机器人已经通过应用创新的调查和友好的聊天从客户那里收集数据,为医疗保险等行业带来了好处。谷歌最近收购了一家名为forward的公司,该公司使用DTs开发聊天机器人,这些机器人在提供世界级的客户服务方面具有非凡的功能。亚马逊(Amazon)也在朝着同样的方向投资,引导客户迅速找到解决问题的方案。
- 通过训练DTs从卫星图像中识别森林损失的不同原因,就有可能预测干扰森林生态环境最可能的原因,如野火、人工林砍伐、大型或小型农业以及城市化。DTs和卫星图像也被用于农业,以分类不同的作物类型,并确定其物候阶段。
- DTs是对文本进行情感分析的重要工具,可以识别文本背后的情感。情感分析是一种强大的技术,可以帮助组织了解客户的选择及其决策驱动因素。
- 在环境科学中,DTs可以帮助确定应对入侵物种的最佳策略,包括从消灭到遏制以及减缓传播。
- DTs也被用来改进金融欺诈的检测。麻省理工学院的研究表明,它可以通过使用数据传输服务(dts)显著提高替代ML模型的性能,数据传输服务(dts)接受了多个原始数据源的培训,以找到与欺诈案件相匹配的交易模式和信用卡。
由于各种原因,DTs非常受欢迎,因为其可解释性可能是其最重要的优势。它们可以训练得非常快,而且容易理解,这就为它们打开了通往科学高墙之外的新领域的可能性。现在,DTs在商业环境中非常流行,并且其使用也扩展到了民用领域,其中一些应用程序引起了很大的关注。
芝麻信用(Sesame Credit)公司(隶属于阿里巴巴)利用DTs和其他算法来构建一个社会评估系统,该系统考虑了各种因素,比如支付账单的准时性和其他在线活动。在中国,一个好的“芝麻分数”的好处包括在交友网站上的知名度更高,如果你需要看医生,可以不用排队。实际上,在中国政府宣布将把所谓的社会信用体系应用到航空和火车上,并在长达一年的时间内禁止有违法行为的人乘坐这种交通工具之后,有人担心,这一体系最终将造就一个庞大的“有ml支持的老大哥”。
基础知识
在电影《Bandersnatch》(Netflix独立的《黑镜》剧集)中,观众可以互动地选择不同的叙事路径,达到不同的故事情节和结局。在电影叙事背后隐藏着一系列复杂的决定,让观众以一种自己选择冒险模式的方式移动,为此Netflix必须想出一种方法,在以一种简单的方式呈现每个场景的同时加载多个版本。在实践中,Netflix的制片人所做的就是对电影进行分割,设置不同的分支点供观众浏览,并得出不同的结果。换句话说,这就像建立一个DT。
DTs由节点、分支和叶子组成。每个节点表示一个属性(或特性),每个分支表示一个规则(或决策),每个叶子表示一个结果。树的深度由层数定义,不包括根节点。
[caption id="attachment_40353" align="aligncenter" width="880"]
在这个例子中,是2能级的DT。[/caption]
DTs对数据应用采用自顶向下的方法,因此在给定一个数据集的情况下,他们试图对它们之间相似的观察结果进行分组和标记,并寻找最佳规则来分割它们之间不同的观察结果,直到它们达到一定程度的相似。
他们使用分层拆分过程,在每一层,他们试图把数据分割成两个或两个以上的组,所以数据分为同一组最相似(同质性),并且组互相尽可能不同(异质性)。
拆分可以是二进制的(它将每个节点最多分成两个子组,并尝试找到最佳分区),也可以是多路的(它将每个节点分成多个子组,使用尽可能多的分区作为现有的不同值)。在实际应用中,通常会看到带有二元拆分的数据传输,但必须知道多路拆分具有一些优势。multiway splits在名义属性中耗尽所有信息,这意味着从根到叶的任何路径中,属性很少出现一次以上,这使得DTs更容易理解。事实上,分割数据的最佳方法可能是为一个给定的特性找到一组间隔,然后根据这些间隔将数据分割成若干组。
[caption id="attachment_40354" align="aligncenter" width="701"]
左边是一个二叉分裂的DT,而右边是一个多路分裂的DT。[/caption]
在二维术语中(仅使用2个变量),DTs将数据空间划分为一组矩形,并在每个矩形中拟合一个模型。它们简单但功能强大,是数据科学家的一种非常好的工具。
[caption id="attachment_40355" align="aligncenter" width="880"]
右边的图显示了由左边的DT生成的二维数据空间的划分(二进制分割)。然而,在实践中,DTs使用了许多变量(通常大于2)。[/caption]
DT中的每个节点都充当某个条件的测试用例,从该节点向下的每个分支对应于该测试用例的一个可能答案。
修剪那棵树
随着DTs中拆分的数量增加,它们的复杂性也随之增加。一般来说,相对于超复杂的DTs,简单的DTs更受欢迎,因为它们更容易理解,而且不太可能陷入过拟合。
过度拟合是指一个模型能够很好地学习训练数据(用于学习的数据),以至于在泛化到新的(不可见的)数据时出现问题。
换句话说,模型学习训练数据中的细节和噪声(不相关的信息或数据集中的随机性),以至于对模型在新数据上的性能产生负面影响。这意味着模型将训练数据中的噪声或随机波动作为概念进行提取和学习。
[caption id="attachment_40356" align="aligncenter" width="372"]
虽然黑线与数据吻合得很好,但绿线过拟合[/caption]
在这种情况下,您的模型与您预先提供的数据完美配合,但是当您将同一个模型公开给新数据时,它会崩溃。它无法重复其高度详细的性能。
那么,如何避免在DTs中过度拟合呢?您需要排除过于适合数据的分支。您希望DT能够泛化并对新数据很好地工作,即使这可能意味着对训练数据失去精度。最好避免使用像鹦鹉一样学习和重复特定细节的DT模型,并尝试开发一种具有能力和灵活性的模型,以便在你提供给它的新数据上获得良好的性能。
修剪是一种用于处理过拟合的技术,它通过删除提供很少预测或分类能力的部分来减小DTs的大小。
本程序的目标是通过减少过拟合的影响和去除可能基于噪声或错误数据的DT部分来降低复杂性和获得更好的精度。对DTs进行修剪有两种不同的策略:
修剪前: 当信息变得不可靠时,停止扩展DT分支。
修剪后:当您采取一个完全生长的DT,然后删除叶节点,只有当它导致一个更好的模型性能。这样,当无法进行进一步的改进时,就可以停止删除节点。
[caption id="attachment_40357" align="aligncenter" width="880"]
未修剪DT的例子,取自DataCamp[/caption]
总之,正确分类或预测每个训练数据示例的大型DT可能不如不完全适合所有训练数据的小型DT好。
主要DTs算法
现在您可能会问自己:DTs如何知道要选择哪些特性以及如何分割数据?要理解这一点,我们需要了解一些细节。
所有的DTs执行基本相同的任务:它们检查数据集的所有属性,通过将数据划分为子组来找到可能得到最佳结果的属性。它们递归地执行这个任务,将子组分割成越来越小的单元,直到树完成(根据某些条件停止)。
这种分割决策严重影响了树的精度和性能,对于这种决策,DTs可以使用不同的算法,这些算法在树的可能结构(例如每个节点的分割数量)、如何执行分割的标准以及何时停止分割方面存在差异。
那么,我们如何定义哪些属性要拆分,何时拆分以及如何拆分?为了回答这个问题,我们必须回顾一下主要的DTs算法:
CHAID
卡方自动交互检测(CHAID)是最古老的DT算法之一,它产生多路DTs(分裂可以有两个以上分支),适用于分类和回归任务。当构建分类树时(因变量本质上是分类的),CHAID依赖于卡方独立检验来确定每一步的最佳分割。卡方检验检验两个变量之间是否存在关系,并应用于DT的每个阶段,以确保每个分支与响应变量的统计显著预测因子显著相关。
换句话说,它选择与因变量交互作用最强的自变量。
此外,如果每个预测器的类别之间对于因变量没有显著差异,则合并它们。在回归树的情况下(因变量是连续的),CHAID依靠f检验(而不是卡方检验)来计算两个总体均值之间的差值。如果F-test是显著的,则创建一个新的分区(子节点)(这意味着分区在统计上与父节点不同)。另一方面,如果目标均值之间的f检验结果不显著,则将类别合并为单个节点。
CHAID不替换丢失的值,并将它们作为一个单独的类来处理,如果合适,这个类可以与另一个类合并。它还产生了更广泛而不是更深的DTs(多路特性),这可能是不切实际的短,并且很难与实际的业务条件相关联。此外,它没有修剪功能。
虽然CHAID不是最强大的(在检测最小可能的差异方面)或最快的DT算法,但是CHAID易于管理、灵活并且非常有用。
主要的DTs算法还有很多,我们明天继续介绍。