关于机器学习中顶级算法需要了解的一切

0_8k5UmElJ_TyUwAcF.jpg
一开始,学习机器学习(ML)可能是令人生畏的。像“Gradient Descent”,“Latent Dirichlet Allocation”或“Convolutional Layer”这样的术语可能会吓到很多人。但是有一些友好的方式进入该学科,我认为从决策树开始是一个明智的决定。


决策树(DT)可能是最有用的监督学习算法之一。与无监督学习(没有输出变量来指导学习过程和数据通过算法探索以找到模式)相反,在监督学习中,您的现有数据已经被标记,并且您知道要在新数据中预测哪种行为你获得了。这是自动驾驶汽车用于识别行人和物体的算法类型,或组织利用这些算法来估算客户的生命周期价值及其流失率。 在某种程度上,监督式学习就像是与老师一起学习,然后将这些知识应用于新数据。 DT是ML算法,其基于描述性特征逐步将数据集划分为较小的数据组,直到它们达到足够小的集合以由某个标签描述。它们要求您拥有标记的数据(标记有一个或多个标签,如植物图片中的植物名称),因此他们会尝试根据该知识标记新数据。
DTs算法非常适合解决分类(机器将数据分类类中,如电子邮件是否为垃圾邮件)和回归(机器预测,如房地产价格)问题。当因变量是连续的或定量的时(例如,如果我们想要估计客户违约贷款的概率),则使用回归树;当因变量是分类或定性时使用分类树(例如,如果我们想要估计一个人的血型)。
DT的重要性依赖于它们在现实世界中具有大量应用程序的事实。作为ML中最常用的算法之一,它们适用于多个行业的不同功能:

由于各种原因,DT非常受欢迎,因为它们的可解释性可能是它们最重要的优势。它们可以非常快速地进行训练并且易于理解,这为远远超出科学墙的边界开辟了可能性。如今,DT在商业环境中非常流行,并且它们的使用也在扩展到民用领域,在那里一些应用程序引起了很大的关注。
Sesame Credit公司(隶属于阿里巴巴的公司)使用DT和其他算法来引导社会评估系统,同时考虑到各种因素,例如支付账单的准时性和其他在线活动。中国良好的“芝麻评分”的好处包括从约会网站的较高知名度到如果你需要去看医生就跳过等候线。事实上,在中国政府宣布将其所谓的社会信用体系应用于航班和火车,并阻止那些犯下不良行为的人将这种运输长达一年之后,人们担心该系统将最终创建一个庞大的“ML支持的老大哥”。

基础

在电影Bandersnatch(来自Netflix的独立黑镜剧集)中,观众可以交互式地选择不同的叙事路径并达到不同的故事情节和结局。电影讲故事背后隐藏着一系列复杂的决策,让观众可以选择自己冒险模式,Netflix必须以一种简单的方式呈现每个场景的多个版本。 。在实践中,Netflix制作人所做的是分割电影并为观众设置不同的分支点,并提出不同的结果。换句话说,这就像构建DT一样。
DT由节点,分支和叶子组成。每个节点代表一个属性(或特征),每个分支代表一个规则(或决定),每个叶子代表一个结果。树的深度由级别数定义,不包括根节点。
0_IS9xKHt83nuERC9P.png
DT对数据采用自上而下的方法,因此在给定数据集的情况下,他们会尝试对它们之间相似的观察进行分组和标记,并寻找最佳规则来分割它们之间不同的观察结果,直到它们达到一定程度相似性。 他们使用分层分割过程,在每一层他们尝试将数据分成两组或更多组,以便属于同一组的数据彼此最相似(> 同质性),并且组尽可能不同彼此(> 异质性)。 拆分可以是二进制(将每个节点拆分为最多两个子组,并尝试查找最佳分区),或多(将每个节点拆分为多个子组,使用与现有不同值一样多的分区)。在实践中,通常会看到带有二进制分割的DT,但重要的是要知道多路分离具有一些优点。Multiway拆分耗尽名义属性中的所有信息,这意味着属性很少在从根到叶的任何路径中出现多次,这使得DT更容易理解。事实上,分割数据的最佳方法可能是找到给定特征的一组间隔,然后根据这些间隔将这些数据分成几组。
0_EhzZNP_6Y7jdJgO9.png
在二维术语中(仅使用2个变量),DT将数据Universe划分为一组矩形,并在每个矩形中拟合模型。它们既简单又强大,是数据科学家的理想工具。

0_cant-HQdfMju-GxG.gif
DT中的每个节点充当某些条件的测试用例,并且从该节点下降的每个分支对应于该测试用例的可能答案之一。

修剪那棵树

随着DT中分裂的数量增加,它们的复杂性增加。一般来说,简单的DT比超复杂的DT更受欢迎,因为它们更容易理解,并且不太可能陷入过度拟合。

过度拟合是指一种模型,它可以很好地学习> 训练数据(它用来学习的数据),以便将其推广到新的(看不见的)数据。 换句话说,模型在训练数据中学习细节和噪声(数据集中的无关信息或随机性),以至于它对新数据的模型性能产生负面影响。这意味着训练数据中的噪声或随机波动被模型拾取并作为概念学习。

1_c3W5mjgvBRIOFA8ye1JEXg.png
在这种情况下,您的模型可以很好地与您提供的数据完美匹配,但是当您将相同的模型暴露给新数据时,它会崩溃。它无法重复其非常详细的表现。
那么,你如何避免在DT中过度拟合?您需要排除适合数据的分支。您想要一个可以在新数据上进行推广和工作的DT,即使这可能意味着在训练数据上失去精确度。最好避免使用DT模型来学习和重复像鹦鹉这样的特定细节,并尝试开发一种具有强大功能和灵活性的模型,以便为您提供的新数据提供良好的性能。

修剪是一种用于处理过度拟合的技术,通过移除提供很少预测或分类能力的树的部分来减小DT的大小。 该过程的目标是通过减少过度拟合和去除可能基于噪声或错误数据的DT部分的影响来降低复杂性并获得更好的准确性。在DT上执行修剪有两种不同的策略:

0_ubL8_k7w3JNEvZ18.png
总之,正确分类或预测训练数据的每个示例的大DT可能不如完全不适合所有训练数据的较小DT。

主DTs算法

现在您可能会问自己:DT如何知道要选择哪些功能以及如何拆分数据?要理解这一点,我们需要了解一些细节。 所有DT执行的任务基本相同:它们检查数据集的所有属性,以通过将数据拆分为子组来查找可提供最佳结果的属性。它们通过将子组拆分为越来越小的单元来递归执行此任务,直到树完成(由某些条件停止)。 这种做出拆分的决定会严重影响树的准确性和性能,对于该决定,DT可以使用不同的算法这些算法在树的可能结构上有所不同(例如,每个节点的拆分数),关于如何执行拆分的标准,什么时候停止分裂。
那么,我们如何定义要拆分的属性,何时以及如何拆分它们?要回答这个问题,我们必须检查主要的DTs算法:

CHAID

卡方自动交互检测(CHAID)是最古老的DT算法方法之一,它生成适用于分类和回归任务的多路 DT(分裂可以有两个以上的分支)。在构建分类树(其中因变量本质上是分类)时,CHAID依靠卡方独立性测试来确定每个步骤的最佳分裂。卡方检验检查两个变量之间是否存在关系,并应用于DT的每个阶段,以确保每个分支与响应变量的统计上显着的预测因子显着相关。 换句话说,它选择与因变量具有最强交互的自变量。 另外,如果每个预测变量的类别相对于因变量彼此之间没有显着差异,则它们被合并。在回归树(其中因变量是连续的)的情况下,CHAID依赖于F检验(而不是卡方检验)来计算两个总体均值之间的差异。如果F测试很重要,则会创建一个新分区(子节点)(这意味着该分区在统计上与父节点不同)。另一方面,如果目标均值之间的F检验结果不显着,则将类别合并为单个节点。
CHAID不会替换缺失值并将它们作为单个类处理,如果合适,它可以与另一个类合并。它还会产生更宽而不是更深的DT(多路特征),这可能是不切实际的短,很难与实际商业环境相关联。此外,它没有修剪功能。
虽然CHAID不是最强大的(在检测最小可能差异方面)或最快的DT算法,但它易于管理,灵活且非常有用。
您可以在此链接中找到带有R的CHAID实现

大车

CART是一种DT算法,它根据依赖(或目标)变量是分类还是数字分别生成二进制分类回归树。它以原始形式处理数据(不需要预处理),并且可以在同一DT的不同部分中多次使用相同的变量,这可以揭示变量集之间复杂的相互依赖性。
分类树的情况下,CART算法使用称为Gini杂质的度量 来为分类任务创建决策点。Gini Impurity通过分裂创建的两个类中的类的混合程度,可以了解分割的精细程度(节点“纯度”的度量)。当所有观察属于同一标签时,有一个完美的分类和一个基尼杂质值为0(最小值)。另一方面,当所有观察在不同标签之间平均分配时,我们面临最坏情况的分割结果和基尼杂质值1(最大值)。
0_8FVbz8azTkk5Titf.png
回归树的情况下,CART算法寻找最小化最小二乘偏差(LSD)的分裂,选择最小化所有可能选项的结果的分区。的LSD(有时称为“方差减少”)度量最小化所观察到的值与预测值之间的平方距离(或偏差)的总和。预测值和观测值之间的差异称为“残差”,这意味着LSD选择参数估计值,以便最小化残差平方和。 LSD非常适合度量数据,并且能够比其他算法正确捕获有关分割质量的更多信息。 CART算法背后的想法是产生一系列DT,每个DT都是“最佳树”的候选者。通过测试(使用DT以前从未见过的新数据)或执行交叉验证(将数据集划分为“k”倍数,并在每个折叠上执行测试)来评估每棵树的性能,从而识别该最佳树。)。
CART 不对树选择使用内部性能度量。相反,DTs性能总是通过测试或交叉验证来测量,并且树选择仅在完成评估之后才进行。

ID3

Iterative Dichotomiser 3(ID3)是一种DT算法,主要用于生成分类树。由于在原始数据中没有证明构建回归树是如此有效,因此ID3主要用于分类任务(尽管某些技术,如构建数值区间可以提高其在回归树上的性能)。 ID3拆分数据属性(二分法)以找到最主要的特征,迭代地执行此过程以自上而下的方式选择DT节点。 对于拆分过程,ID3使用信息增益指标来选择最有用的分类属性。信息增益是从信息理论中提取的一个概念,它指的是一组数据中随机性水平的降低:基本上它衡量一个特征给我们关于一个类的“信息”。ID3将始终尝试最大化此度量标准,这意味着具有最高信息增益的属性将首先分割。
信息增益与的概念直接相关,是衡量数据中不确定性或随机性的量。熵值的范围从0(当所有成员属于同一类或样本完全同质时)到1(当存在完美的随机性或不可预测性,或者样本被平均分割时)。
你可以这样想:如果你想做一个无偏见的抛硬币,那就是完全随机性或熵值为1(“头”和“尾”同样如此,概率为0.5)。另一方面,如果您掷硬币,例如两边都有“尾巴”的硬币,则从事件中删除随机性,并且熵值为0(获得“尾巴”的概率将跳至1,并且“头”的概率将降至0)。
0_5lJWYOtD23uGMwn0.png
这很重要,因为信息增益是熵的减少,并且为DT节点选择产生最大信息增益的属性。
但是ID3有一些缺点:它不能处理数字属性,也不能缺少值,这可能代表严重的局限性。

C4.5

C4.5是ID3的继承者,代表了几个方面的改进。C4.5可以处理连续和分类数据,使其适合生成回归分类树。此外,它可以通过忽略包含不存在数据的实例来处理缺失值。
与ID3(使用信息增益作为拆分标准)不同,C4.5使用增益比率进行拆分。增益比率是信息增益概念的一种修改,通过在选择属性时考虑分支的数量和大小,减少了具有大量分支的DT的偏差。由于信息增益显示对具有许多结果的属性的不公平偏好,增益比率通过考虑每个分裂的内在信息来校正这种趋势(它通过使用分割信息值基本上“归一化”信息增益)。这样,选择具有最大增益比的属性作为分割属性
此外,C4.5还包括一种称为窗口的技术,该技术最初是为了克服早期计算机的内存限制而开发的。表示该算法随机选择训练数据的子集(称为“窗口”)并从该选择构建DT。然后使用该DT对剩余的训练数据进行分类,并且如果它执行正确的分类,则DT结束。否则,将所有错误分类的数据点添加到窗口中,并且循环重复直到训练集中的每个实例被当前DT正确分类。由于使用随机化,该技术通常导致DT比标准过程产生的DT更准确,因为它捕获所有“罕见”实例以及足够的“普通”情况。 C4.5的另一个功能是它可以> 修剪 DT。 C4.5的修剪方法基于估计每个内部节点的错误率,并且如果叶子的估计误差较低,则用叶节点替换它。简单来说,如果算法估计如果删除节点的“子节点”并且该节点成为叶节点,DT将更准确,那么C4.5将删除这些子节点。
该算法的最新版本称为C5.0,它是在专有许可下发布的,并且对C4.5提出了一些改进,如:

  • 提高速度: C5.0明显快于C4.5(几个数量级)。
  • 内存使用情况: C5.0的内存效率高于C4.5。
  • 可变错误分类成本:在C4.5中,所有错误都被视为相等,但在实际应用中,某些分类错误比其他错误更严重。C5.0允许为每个预测/实际类对定义单独的成本。
  • 较小的决策树: C5.0获得与C4.5类似的结果,DT的数量要小得多。
  • 其他数据类型: C5.0可以使用日期,时间,并允许将值标记为“不适用”。
  • 风选: C5.0可以在构造分类器之前自动获取属性,丢弃那些可能无用或看起来无关紧要的属性。

你可以在这里找到C4.5和C5.0之间的比较

树的黑暗面

当然DT有很多优点。由于它们的简单性以及易于理解和实施的事实,它们被广泛用于许多行业中的不同解决方案。但是你还需要意识到它的缺点。 DT倾向于> 过度训练他们的训练数据,如果先前向他们显示的数据与他们稍后显示的数据不匹配,则会使他们表现不佳。 它们也遭受高方差,这意味着数据的微小变化可能导致一组非常不同的分裂,使得解释有些复杂。它们具有固有的不稳定性,因为由于它们的分层性质,顶部分裂中的误差的影响传播到下面的所有分裂。
在分类树中,错误分类观察的结果在某些类别中比其他类别更严重。例如,预测一个人实际上不会心脏病发作可能会更糟,反之亦然。这个问题在像C5.0这样的算法中有所缓解,但在其他算法中仍然是一个严重的问题。
如果某些类比其他类占主导地位,DT也可以创建有偏见的树。这是不平衡数据集中的一个问题(数据集中的不同类具有不同的观测数),在这种情况下,建议在构建DT之前平衡de数据集。
在回归树的情况下,DT只能根据他们之前看到的数据在他们创建的值范围内进行预测,这意味着他们可以生成的值具有边界
在每个级别,DT寻找最佳可能的分割,以便它们优化相应的分割标准。 但DTs分裂算法远远超出它们运行的当前水平(它们是> “贪婪”),这意味着它们在每一步都寻找局部最优而不是全局最优。 DTs算法根据一些分裂标准一次增加树一个节点,并且不实现任何回溯技术。

人群的力量

但这里有好消息:有不同的策略来克服这些缺点。集合方法结合了几个DT来提高单个DT的性能,并且是克服已经描述的问题的一个很好的资源。我们的想法是使用相同的学习算法训练多个模型,以获得优异的结果。 执行整体DT的两种最常用的技术可能是> Bagging和> Boosting。 当目标是减少DT的方差时,使用Bagging(或Bootstrap Aggregation)。方差涉及DT可能非常不稳定的事实,因为数据中的小变化可能导致生成完全不同的树。因此,Bagging的想法是通过并行创建数据的随机子集(来自训练数据)来解决此问题,其中任何观察具有出现在新子集数据中的相同概率。接下来,每个子集数据集合用于训练DT,从而产生不同DT的集合。最后,使用那些不同DT的所有预测的平均值,这产生比单个DT更强大的性能。随机森林 Bagging是对Bagging的扩展,需要额外增加一步:除了获取随机数据子集外,还需要随机选择一些功能,而不是使用所有功能来增长DT。
Boosting是另一种创建预测变量集合的技术,可以减少DT的变化,但采用不同的方法。它使用顺序方法,它适合连续的DTS,并在每一步,尝试减少前一树的错误。使用Boosting技术,每个分类器都在数据上进行训练,同时考虑到之前的分类器成功。在每个训练步骤之后,基于先前的性能重新分配权重。这样,错误分类的数据会增加其权重强调最困难的案例,以便随后的DT在培训阶段关注它们并提高其准确性。与Bagging不同,在Boosting中,观察值是加权的,因此其中一些将更频繁地参与新的数据子集。作为该过程的结果,整组的组合改善了DT的性能。
在Boosting中,有几种方法可以确定在训练和分类步骤中使用的权重(例如Gradient Boost,XGBoost,AdaBoost等)。
您可以在此处找到两种技术之间相似点和不同点的描述