腾讯阿里都在用!机器学习最热研讨方向入门,附学习道路图
作者头像
  • 2020-03-04 22:05:37 7

集成学习

集成学习是一种当前机器学习领域备受瞩目的研究方向,近年来不少机器学习竞赛的优胜者都采用了集成学习的方法。本文将介绍几种具有代表性的集成学习方法,包括Boosting、Bagging以及Stacking,并着重探讨XGBoost这一在集成学习中表现卓越的技术。

集成学习的核心理念

集成学习的基本理念是通过结合多个学习器来提升整体的预测效果。尽管单个学习器可能无法精确预测所有情况,但通过优势互补,可以达到更高的预测精度。这种理念类似于“三个臭皮匠,顶个诸葛亮”的古训。

集成学习的概念起源于Valiant提出的PAC(Probably Approximately Correct)学习模型,该模型定义了弱学习和强学习的概念。弱学习是指那些识别准确率略高于随机猜测的学习算法,而强学习则是指那些在多项式时间内可以实现高准确率的学习算法。Schapire在1990年证明了可以通过弱学习器提升为强学习器的方法。

目前,集成学习中最具代表性的方法包括Boosting、Bagging和Stacking。

Boosting

Boosting通过训练一系列弱学习器,并将它们的预测结果结合起来形成最终的预测结果。在训练过程中,后期的学习器会更加关注先前学习器的错误。其中,AdaBoost是最具代表性的Boosting算法之一,它通过为每个弱学习器分配不同的权重来提升模型性能。

Gradient Boosting是另一种实现Boosting思想的方法,它通过优化损失函数的梯度下降方向来改进模型。这种方法的代表算法包括GBDT和XGBoost(将在后续部分详细介绍)。

尽管Boosting在提高模型准确性方面表现出色,但由于其算法需要按顺序生成学习器,因此在时间成本上相对较高。

Bagging

Bagging通过对原始数据集进行有放回抽样,生成多个随机子集,然后用这些子集分别训练多个学习器,最后综合它们的预测结果。随机森林是Bagging最具代表性的应用,它通过决策树算法实现了高效的集成学习。

相比于Boosting,Bagging的模型精度较低,但其学习器可以并行生成,从而节省大量时间。

Stacking

Stacking通过使用一组基模型的预测结果生成一个新的数据集,然后用这个新数据集训练一个组合器模型,以实现最终的预测。组合器模型通常采用逻辑回归。

XGBoost详解

XGBoost(Extreme Gradient Boosting)由华盛顿大学的陈天奇博士提出,最初作为分布式机器学习研究项目的一部分。在希格斯机器学习挑战赛中,XGBoost因其出色的表现而广受关注,并在数据科学应用中得到了广泛应用。

目前,许多互联网巨头如腾讯、阿里巴巴等已经将XGBoost应用于其业务中。XGBoost在推荐系统、搜索排序、用户行为预测、点击率预测等方面也取得了显著成效。

虽然近年来深度神经网络越来越流行,但XGBoost在处理有限样本、训练时间短、调参经验不足的情况下仍然具备独特的优势。相比深度神经网络,XGBoost更适合处理表格数据,且具有更好的可解释性,同时易于调参和数据不变性等优点。

XGBoost是Gradient Boosting的一种实现方式,相比其他实现方法,XGBoost进行了许多优化,显著提升了模型训练的速度和精度。其主要特性包括:

  1. 将正则项加入目标函数,控制模型复杂度,避免过拟合。
  2. 对目标函数进行二阶泰勒展开,同时利用一阶导数和二阶导数。
  3. 实现了可并行的近似直方图算法。
  4. 实现了缩减和列采样。
  5. 实现了快速直方图算法,引入了基于损失引导的树构建方法。
  6. 实现了求解带权值的分位数近似算法。
  7. 根据样本自动学习缺失值的分裂方向。
  8. 数据预先排序,并以块的方式保存,有利于并行计算。
  9. 采用缓存感知访问、外存块计算等方式提高数据访问和计算效率。
  10. 基于Rabit实现分布式计算,并集成到主流大数据平台中。
  11. 支持CART作为基分类器之外的其他算法,如线性分类器及LambdaMART排序模型等。
  12. 实现了DART,引入Dropout技术。

目前已有越来越多的开发者为XGBoost开源社区做出贡献,XGBoost支持多种编程语言,包括Python、Scala和Java等。Python用户可以将XGBoost与scikit-learn集成,实现更高效的机器学习应用。此外,XGBoost还集成到了Spark、Flink等主流大数据平台中。

XGBoost学习路径

XGBoost的学习路径包括以下几个步骤:

  1. 安装XGBoost:可以通过pip安装或者直接编译源码安装。

    • pip安装:执行pip install xgboost(对于Python 3.x版本,执行pip3 install xgboost)。
    • 源码编译安装:通过Git克隆XGBoost项目,然后编译并安装。
  2. 构建共享库:使用Git克隆XGBoost项目并编译源码。

    • 执行git clone --recursive https://github.com/dmlc/xgboost
    • 进入项目目录并编译:cd xgboost; make
  3. 安装Python包:进入Python包目录并执行安装命令:cd python-package; sudo python setup.py install

使用XGBoost进行蘑菇毒性预测

XGBoost安装完成后,我们可以通过一个简单的示例展示如何使用XGBoost处理机器学习任务。该示例使用XGBoost自带的数据集(位于demo/data文件夹下),该数据集包含不同蘑菇的特征(如大小、颜色等),并标记了它们是否具有毒性。

示例代码

```python import xgboost as xgb

数据读取

xgbtrain = xgb.DMatrix('${XGBOOSTPATH}/demo/data/agaricus.txt.train') xgbtest = xgb.DMatrix('${XGBOOSTPATH}/demo/data/agaricus.txt.test')

定义模型训练参数

params = { "objective": "binary:logistic", "booster": "gbtree", "max_depth": 3 }

训练轮数

num_round = 5

训练过程中实时输入评价结果

watchlist = [(xgbtrain, 'train'), (xgbtest, 'test')]

模型训练

model = xgb.train(params, xgbtrain, numround, evals=watchlist)

模型预测

preds = model.predict(xgb_test) print(preds) ```

上述代码展示了如何读取训练集和测试集数据,定义模型训练参数,并训练模型。最终,通过训练好的模型对测试集进行预测,预测结果是一个浮点数数组,每个值代表模型预测该蘑菇是否有毒的概率。

关于作者

何龙,现任滴滴出行高级工程师,XGBoost开源社区贡献者。他专注于人工智能和机器学习领域,从底层算法原理到高层应用实践均有广泛的研究兴趣和实践经验。他对XGBoost有着深入的理解和丰富的开发经验,曾多次参与XGBoost的源码阅读和优化工作。

本文部分内容摘自《深入理解XGBoost:高效机器学习算法与进阶》,经出版社授权发布。

    本文来源:图灵汇
责任编辑: :
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
学习腾讯阿里在用研讨入门道路方向机器
    下一篇