做者 | Prashant Gupta
node
译者 | AI100(rgznai100)web
在实际生活中,树的类好比影随形。事实证实,树形结构对于机器学习领域一样有着普遍的影响,特别是对分类和回归两大任务来讲。算法
在决策分析中,决策树能够很是清晰地呈现决策的过程和结果。“树”如其名,决策树所用的正是一个树形的决策模型。数据挖掘领域常常会用决策树来搜寻给定问题的解决策略,机器学习领域一样会普遍用到这一方法。这将会是这篇博客的主题。机器学习
对于这一点,咱们来看一个基本的例子:用泰坦尼克号的数据集每位乘客的信息来预测他可否幸存下来。接下来这个模型,选取了数据集内的3项特征(features)/ 属性(attributes)/ 列(columns):性别、年龄、sibsp(Sibling及Spouse:表示随行的亲属数量)。函数
决策树自上而下进行绘制,顶部节点被称为根节点。如上图所示:黑色加粗文字表明了条件(condition) / 内部节点(internal node),分支(branches)/ 边界(edges)基于这些节点分裂而出。再也不分裂的节点就是计算出来的决策 / 叶节点。在本例中,乘客的幸存或遇难,分别对应于绿色和红色的叶节点。
性能
尽管真实的数据集将会有着更多的特征,前面的树形图仅能算做某颗大树的部分分支,但你没法否定这一算法的简洁性。特征的重要性一目了然,数据间的关系也一眼就能看清。这里的方法一般被称为从数据中构建决策树(learning decision tree from data),上面的树形图也被称做分类树(Classification tree),由于算法在这里的目标是把乘客分为幸存或遇难这两类。回归树(Regression trees)也是一样的方式进行呈现,只是它们所预测的是连续的数值,好比房价。一般来讲,决策树算法指的是CART,即分类回归树(Classification And Regression Tree)。学习
那么,决策树背后机制究竟是什么?在造成决策树的过程当中,分裂涉及到的问题是选择哪一个特征和分裂的条件是什么,同时还要知道什么时候终止分裂。因为树的生成相对比较武断,你须要对其进行修剪,才能让它看起来更好。让咱们先来看一个比较经常使用的分裂方法。测试
在递归二元分裂(Recursive Binary Splitting)中,全部的特征都会被考虑,各类不一样的分裂方式都将被尝试,并使用成本函数(cost function)来评估每种分裂方式的优劣。成本最优(最低)的方法将被选用来进行分裂。
优化
之前面泰坦尼克号数据集的分类树为例:第一次分裂或在根节点时,全部的属性/特征都会归入进来考虑,训练数据基于这一点被分红不一样的组。咱们共有3个特征,所以会有3个待定的分裂。然后,咱们用一个函数来计算每种分裂所消耗的成本。算法自动选择损失最小的那一个,具体到本例中就是乘客的性别。这个算法本质上是递归的,由于每次分裂所造成的数据组都能以一样的方式再次进行划分。因为这一步骤,该算法也被称为是贪心算法,由于咱们极度渴望下降损失。这也使得根节点成为最好的预测器 / 分类点。spa
分裂成本
让咱们进一步讨论用于分类和回归的成本函数。在这两种状况下,成本函数都在试图寻找分裂后结构类似程度最高的那种方式。其中的意义是,咱们能够更加确信测试数据将会跟随哪一个路径。
好比预测房价:决策树开始分裂时须要考虑训练数据的全部特征;对于训练数据的特定分组,其输入响应的均值会被做为该组的预测值。上述函数会被用在全部的数据点,用以计算全部可能分裂的成本。损失最低的分裂方式将被筛选出来。另外一种成本函数涉及到约化和标准差,更多信息可参考这里:http://www.saedsayad.com/decision_tree_reg.htm。
为评估某个分裂方式的优劣,咱们用Gini分数来衡量训练数据分裂后的混乱程度。其中,pk表示特定分组中相同输入类别所占的比例。当某一数据组的全部输入都来自同一类别时,咱们就获得了一个完美分类,此时的pk值不是1就是0,而G一定为0。但若是某个数据组中两个类别的数据各占一半,这就发生了最坏的状况,此时二元分类的pk=0.5, G=0.5。
什么时候中止分裂?
接下来你可能会问,决策树什么时候中止分裂?因为一个问题一般有着大量的相关特征,进而生成大量的分裂,造成一个巨大的树形图。如此复杂的树,就容易出现过拟合。所以,咱们有必要知道什么时候来中止分裂。
一种方法是在每一个叶节点上设置训练输入量的最小阈值。好比,咱们能够把每一个叶节点设置成最少要有10位乘客的数据,忽略掉那些乘客数量少于10的叶节点。另外一种方法是设定出模型的最大深度。决策树最大深度指的是从根节点到叶节点的最长路径所对应的分裂长度。
修剪
决策树的性能可经过修剪来进一步提高,这就涉及到移除那些特征并不重要的分支。经过这种方式,咱们下降了决策树的复杂性,也就是经过下降过拟合程度来提高它的预测能力。
修剪既可从根节点开始,又可从叶节点开始。最简单的办法是从叶节点开始,并移除全部使用该叶节点主分类的节点,若是该操做不会削弱决策树的准确度,这一修剪就可被执行。这一方法被称为减小错误修剪(reduced error pruning)。你还能使用其它更为成熟的修剪方法,好比成本复杂修剪(cost complexity pruning),它用一个学习参数来衡量当前节点的子树大小,并以此来决定是否保留它。这一方法也被称做最弱链接修剪(weakest link pruning)。
分类回归树优势
易于理解、阐释,易于可视化。
决策树潜在进行的是变量筛选(variable screening)或特征选取(feature selection)。
可以处理数值与标注这两类数据,并能处理多输出问题。
对用户而言,决策树仅需相对较少的数据预处理
参数间的非线性关系不会影响决策树性能。
分类回归树缺点
决策树容易创造出过于复杂的树,导致数据泛化不够。这就是所谓的过拟合(overfitting)。
决策树不够稳定,由于数据的微小变化可能会生成一个彻底不一样的树形图。这被称为变异(variance),须要采起办法进行优化。
贪心算法没法保证所生成的决策树全局最优。这可经过训练多颗树来加以缓解,它们的特征和样本可经过重置随机取样来得到。
若是某些类别的权重过大,决策树就会生成误差树(biased trees)。所以,在用数据生成决策树前,要注意平衡数据集的特征。
关于决策树的这些概念都很是基础。目前,实现该算法的一个很是流行的库是Scikit-learn。它拥有很是好的API,只须要几行的Python代码,你就能很方便地构建出模型。
原文连接:https://medium.com/towards-data-science/decision-trees-in-machine-learning-641b9c4e8052