最近在各个专业水平的数据科学专家中,梯度提升成为最流行的学习机之一。受欢迎程度的提升很大一部分归功于几年来Kaggle竞赛者稳定的良好竞赛结果的驱动。然而,许多梯度提升的使用者仍然对这种机器是如何构建的,以及这种机器的核心思想是从哪里来的等细节感到模糊不清。在这里,我们要讨论梯度提升中树的形状和大小的一些细节。
梯度提升最初是由美国斯坦福大学教授杰罗姆·弗里德曼开发的,他虽为物理学家出身,但自1982年以来一直在斯坦福大学统计系任职。弗里德曼也因为他在快速最近邻计算(1974),递归分割树(CART®,1984年),MARS®回归样条(1991年),快速弹性网计算(PathSeeker,2004年,Generalized PathSeeker,2008年)以及许多其他领域的开创性工作而著名。
他的基础性梯度提升论文出现在1999年和2001年,他在那里谈论树生长的策略。作为一个商业产品,弗里德曼的软件是在2002年由Salford Systems 以TreeNet®的名义发布的,该软件仍然是基于弗里德曼的专有代码的唯一的梯度提升机。自2002年以来独立编写的开源梯度提升机已经发布。
在弗里德曼的文章里,他概述了所说的“第一最优”二叉树生长的策略,其中的工作原理如下。首先,当然,我们必须分裂根结点。然后,我们必须决定是否将继续通过分裂左或右子结点让树生长。我们做出的决定是实际分裂两个子结点,但我们仅对最能提高训练数据上树的表现的那一个进行分裂。
做出这个决定后,我们就可以自由地停止树的生长,并运用3结点树。诚然,我们实际上已经分裂两子结点,并知道4末端结点树会是什么。但在这个阶段,我们正式只有3结点树。如果建模者要求3结点树,那么我们已经完成了这个学习周期,我们就可以进入到下一个树的构建。但如果,例如,建模者要求5结点树,那么我们重复这个过程,使用在我们的树中的可用的终端结点,来决定我们下一个应该分裂哪一个。
要强调的是,要做出这样的决定,我们着手分裂最近生成的两个末端结点,并且选择对提高训练数据上性能改进最佳的子结点。这意味着,随着树的成长,我们不知道接下来哪些可用的终端结点将被分裂,树就可能变成是极不平衡的。例如,分裂根结点之后,树的一边有可能永远不会进一步生长,而另一侧出现所有进一步的分裂。“第一最优”树生长策略只存在于弗里德曼的原创梯度提升软件之中(TreeNet)。
相比之下,在R和其他地方可见的GBM和xgboost梯度提升机,以及由一些机器学习的初创公司提供的梯度推进机所提供的树模型产生(或至少试着产生)完全平衡树。用户只能请求由深度描述的树,并且由于树是二元递归分割的树,它们将包含两个终端结点的功率,即2,4,8,16,等等终端结点。换句话说,这些梯度推进机基本上局限于非常有限的生长树的尺寸,而弗里德曼的梯度提升机可以在技术上生长任何整数大小的树。
在TreeNet的最新版本(SPM8.0,2016年)用户可以通过深度限制限定树,以便促进两种风格的树生长之间的比较。在我们的初步实验里,我们发现,由“最优先”策略允许增加的灵活性是一个优点。然而,一如既往,实践了,才了解哪些参数设置似乎最适合特定的问题。
还有可能值得实验的是用弗里德曼的随机选择树的大小的想法,其中每棵树的预期大小是从泊松分布中由建模者选定的平均值随机抽取的。因此,我们可以指定我们正在寻找的树的平均大小是一个有八个终端结点的树,但我们试图制作产生的那棵特定的树的实际的树节的数量将会由平均值为8的泊松分布中随机抽取。弗里德曼使用这方法的原始的理由是允许被不同程度的介入以嵌入在每个树,用于之后处理模型,提取规则。然而[a1] ,这个想法也可以是用于正常模式构造。
上面我们通过分裂根结点开始,当然,我们所有树的生长策略都从这里开始。现在的问题是我们接下来分裂哪个结点?弗里德曼办法是分裂左和右子结点,但可以只保留两者中的较好的一个。因此,下面的树是一个可能通过TreeNet梯度推进制作生长的只有三个终端结点的树。
相比之下,深度定义的树必须完成在给定级别的所有分裂,因此,如果我们想有两个以上的终端结点一棵树,我们别无选择,只能一路去分裂四个结点。
如果你向TreeNet请求4结点树你可能会得到类上面的平衡的树,但你也可能得到类似下面的树木。我们是怎么得到那个形状?实际上,我们让所有的分支生长并且通向一个平衡深度的两棵树,但发现,下面的不平衡一棵树却给出(训练数据)更好的结果。你可能会说,深度受限制的树不太容易过度拟合,因为它缺乏一些优先树具有的灵活性。
在我们的经验里,在一般情况下,最佳优先策略制作的树产生的效果比深度定义的树木更好。最好优先策略允许我们对3,4,5,6和7结点树进行实验,而深度定义树只能在平衡4个结点到均衡的8结点树之间的尺寸范围内进行选择。幸运的是,当使用训练梯度推进的机器时,TreeNet允许你使用两种策略。从而,数据科学家可以做出选择,把树调整到最适合手头问题的状态。