制作组中英文书名:机器学习最优化演算法:XGBoost
英文书名:XGBoost Algorithm: Long May She Reign!
译者:学雷锋制作组(yhfwww)
仍然提过15天前参加组织工作的这天,刚完成博士生课业的我,重新加入了一家全球资产管理出任策略师。这天我时不时地填塞围巾,不懈努力忆起段小宇的大部份东西,揣测自己是否足够多独当一面组织工作。觉察到我的恐惧,老板娘笑容着说:
“别担心!你只需要晓得重回数学模型要是!”
我当时在想,“我晓得这个!”。我晓得重回数学模型、非线性重回和方法论重回。老板娘的讲法是对的,在会期内我实际上建立了如前所述重回的统计数据数学模型。在那个时候,重回可视化是预估分析毫无疑问的女皇。15年后,重回可视化的时代早已结束。慨叹的女皇早已离场,原本的是英文名字流行时尚、生机满满新女皇XGBoost(Exterme Gradient Boosting,无限大势能提高)。
什么是XGBoost?
XGBoost是如前所述计算机程序的软件系统机器学习演算法,使用了势能提高架构。在牵涉非形式化统计数据数据(影像、文档等)的预估问题中,人工智能往往强于大部份其他演算法或架构。然而,当牵涉到较大型形式化/表单统计数据数据时,如前所述计算机程序的演算法被指出是目前同行业中最合适的。参见附注了解前些年如前所述树的演算法的发展。
如前所述计算机程序的XGBoost演算法进化
XGBoost演算法是普林斯顿大学的一个研究工程项目。陈天奇和Carlos Guestrin在2016年的SIGGDD讨论会登出的的学术论文,让机器学习世界热火朝天。自导入以来,该演算法不仅获得了为数众多的Kaggle体育竞技,而且还被指出是若干个最前沿行业应用的推动力。因此,有一个强悍的统计数据数据生物学家街道社区为XGBoost开放源码工程项目作出重大贡献,GitHub上有大约350个重大贡献者和~3600个提交者。该演算法有以下特点:
应用范围广泛:可用于解决重回、分类、排名和用户自定义预估问题。
可移植性:在Windows、Linux和os x上运行平稳。
语言:支持大部份主流的编程语言,包括C++、Python、R、java、Scala和Julia。
云软件系统:支持AWS、Azure和Yarn集群,与Flink、Spark和其他生态系统配合良好。
如何建立对XGBoost的直觉认识?
计算机程序,在其最简单的形式,是易于可视化和相当可解释的演算法,但为下一代如前所述树的演算法建立直觉可能有点棘手。下面是一个简单的类比,可以更好地理解如前所述树的演算法的发展。
照片来Unsplash的rawpixel
想象一下,你是一个招聘经理,面试几位资历优秀的应聘者。如前所述树的演算法进化的每一步都可以看作是面试过程的一个版本。
计算机程序:每个招聘经理都有一套标准,比如教育水平、组织工作年限、面试表现。计算机程序类似于招聘经理根据自己的标准面试应聘者。
Bagging:现在想象一下,不是一个面试官,而是一个面试小组,每个面试官都有投票权。Bagging聚合包括通过民主投票过程将大部份面试官的意见结合起来,以最终作出决定。
随机森林:这是一种如前所述Bagging的演算法,有一个关键的区别,其中只有一个子集的特征是随机选择的。换言之,每个面试官只会对面试者进行一些随机选择的资格测试(例如,测试编程技能的技术面试和评估非技术技能的行为面试)。
Boosting:这是一种替代方法,每个面试官都会根据前一位面试官的反馈来改变评估标准。这通过部署一个更动态的评估过程来“提高Boosts”面试过程的效率。
势能提高:通过势能下降演算法将误差最小化的一种特例,例如,战略咨询公司利用案例面试来淘汰不合格的候选人。
XGBoost:可以把XGBoost看作是对“steroids”的势能增强(它被称为“极致势能增强”是有原因的!)。它是软硬件优化技术的完美结合,可以在最短的时间内使用较少的计算资源获得优异的结果。
为什么XGBoost表现如此出色?
XGBoost和Gradient Boosting Machines(GBMs)都是软件系统树方法,它们采用势能下降结构来提高弱学习者(CARTs)的学习能力。然而,XGBoost通过系统优化和演算法增强改进了基本GBM架构。
XGBoost如何优化标准GBM演算法
并行化:XGBoost使用并行化实现序列树的构建过程。这是可能的,因为用于构建基本学习器的循环具有可互换性;外部循环枚举树的叶节点,第二个内部循环计算特征。这是可能的,因为用于构建基本学习器的循环具有可互换性;外部循环枚举树的叶节点,第二个内部循环计算特征。这种循环嵌套限制了并行化,因为没有完成内部循环(对这两个循环的计算要求更高),外部循环就无法启动。因此,为了改进运行时,循环的顺序是通过初始化来交换的,通过对大部份实例的全局扫描和使用并行线程进行排序。此开关通过抵消计算中的任何并行化开销来提高演算法性能。
树修剪:GBM架构中的树分裂停止准则本质上是贪婪的,它依赖于分裂点的负损失准则。XGBoost使用指定的“max_depth”参数,而不是先使用条件,然后开始向后修剪树。这种“深度优先”方法显著提高了计算性能。
硬件优化:此演算法旨在有效利用硬件资源。这是通过缓存感知来实现的,通过在每个线程中分配内部缓冲区来存储势能统计数据信息。进一步的增强,如“内核外”计算优化可用磁盘空间,同时处理不适合内存的大统计数据数据帧。
演算法增强:
正则化:它通过L1脊线L2正则化来惩罚更复杂的数学模型,以防止过度拟合。
稀疏性意识:XGBoost通过根据训练损失自动“学习”最佳缺失值,自然地允许输入稀疏特征,并更有效地处理统计数据数据中不同行业型的稀疏模式。
加权分位数草图:XGBoost采用分布式加权分位数草图演算法,有效地找到加权统计数据数据集之间的最佳分割点。
交叉验证:该演算法在每次迭代中都带有内置的交叉验证方法,不需要显式地对该搜索进行编程,也不必指定一次运行中所需的确切的提高迭代次数。
证据在哪里?
我们使用scikitlearn的“Make_nuclassification”数据包创建了一个随机样本,其中有100万个统计数据数据点,有20个特征(2个是信息性的,2个是冗余的)。我们测试了一些演算法,如Logistic重回、随机森林、标准势能提高和XGBoost。
XGBoost与使用SKLearn的Make_Classification 统计数据数据集的其他ML演算法的比较
如上图所示,与其他演算法相比,XGBoost数学模型具有最佳的预估性能和处理时间组合。其他严格的基准研究也产生了类似的结果。难怪XGBoost在最近的统计数据数据科学体育竞技中被广泛使用。
“如有疑问,请使用XGBoost”——Owen Zhang
所以我们应该一直使用XGBoost吗?
说到机器学习(甚至是生活),没有免费的午餐。作为统计数据数据科学家,我们必须测试手头统计数据数据的大部份可能的演算法,以确定冠军演算法。此外,选择正确的演算法是不够的。我们还必须通过调整超参数来为统计数据数据集选择正确的演算法配置。此外,在选择获胜演算法时还有其他一些考虑因素,例如计算复杂度、可解释性和易于实现。这正是机器学习开始从科学走向艺术的起点,但老实说,这就是奇迹发生的地方!
未来会怎样?
机器学习是一个非常活跃的研究领域,早已有几种可行的XGBoost替代方案。微软研究院最近发布了LightGBM架构来增强势能,显示出巨大的潜力。Yandex Technology开发的CatBoost早已取得了令人印象深刻的基准测试结果。在预估性能、灵活性、可解释性和实用性方面,我们有一个比XGBoost更好的数学模型架构是迟早的事。然而,直到有一个强悍的挑战者出现,XGBoost将继续统治机器学习世界!