楼主: yunchuangao
1476 0

[金融计量学] 机器学习建模:互动笔记 -- XGBoost [推广有奖]

  • 0关注
  • 0粉丝

本科生

35%

还不是VIP/贵宾

-

威望
0
论坛币
2440 个
通用积分
23.3071
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2275 点
帖子
33
精华
0
在线时间
75 小时
注册时间
2008-10-7
最后登录
2023-1-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

注:我们整理了机器学习建模的步骤和实例,供需要快速入门的同行参考。提供互动程序和实例,因为笔记内容和格式的限制,有些内容的显示请移步至外部连接。

原文连接:
https://www.ainumeric.com/ml_training/course/machinelearning.php


机器学习模型分类


机器学习模型可以分为三大类:


监督性学习(supervised learning):训练数据的标识(目标值)是已知的,机器模型对训练数据以外的新数据进行标记。常用的监督学习模型有:

  • Support vector machine
  • Decision trees
  • K-nearest neighbor
  • Neural network
    其中,Neural Network可以用于监督学习,也可用于非监督学习。


非监督性学习(unsupervised learning):对没有给定标记(目标值)的训练样本进行学习,以发现训练样本集中的结构性知识。典型的非监督学习有:

  • Clustering
  • Neural network


强化学习(Reinforcement learning):智能体(agent)从环境(environment)中积累知识,学习最优的策略,从而决定下一个合适的动作(action),目的是最大化长期总收益。强化学习中的关键组成部分:

  • 环境(Environment):是智能体的工作环境。
  • 模型(model):环境的描述可以是已知的或者未知的。它由两个组成部分:
    Transition:从一种状态到另一个状态的概率;
    Reward:智能体工作的反馈信息;
  • 状态(State):环境的状态;
  • 策略(Policy):从State到Action的映射;

  • 强化学习常用的描述方式是:Markov Decision Process; Bellman equation。常用的解决方法有:

  • Brute force

  • Value function: Dynamic programming;Monte-Carlo method;Temporal-difference learning
  • Direct policy search


机器模型的分类方法有很多,比如下图将强化学习,集成学习和神经网络与经典的模型分别归类。


XGBoost 简介


XGBoost (Extreme Gradient Tree Boosting) 是集成模型(Ensemble Model)的一种,是在 Gradient Model 的基础上发展起来的,可用作回归或者分类。在很多实际问题中,尤其是近年的keggle等竞赛中,它的性能优于其他模型。


按照子模型的集成方式,集成模型分为两大类:


  • 平均 (averaging):首先创立独立的子模型,然后按照加权平均的方式集成子模型。一般来说,模型的性能优于每个独立的子模型。这一类的代表有:Bagging, Forests of Randomized Trees, ...

  • 提升 (boosting):按次序构造子模型,有选择地使用子模型构造最终的集成模型。最终目的是使得集成模型的估计偏差最小化。这一类的代表有:AdaBoost, Gradient Tree Boosting, ...
    XGBoost 模型是按照 Boosting 方法构造的,它的主要优点有:

  • 运算速度快:它是用 C++ 写成的。

  • 高性能:利用 GPU 和网络进行并行计算。

  • 在近年的许多竞赛和项目中性能优于其他模型。

  • 灵活的超参数设置。


XGBoost 模型描述

在集成模型 (Ensemble Model) 中,最后的结果是多个子模型的结果的整合,这些子模型被称为基本模型,或者弱模型 (weak estimators)。集成模型的目地是使得最后的整合模型的性能优于每个子模型。而子模型的选择也是有条件的,子模型的选择取决于不同的集成模型算法,对子模型的最低要求是他们的性能优于随机模型。


对于 XGBoost,它的子模型是 CART,即 classification and regression tree。我们可以认为 CART 就是运用于分类和回归的决策树 (decision tree)。下面是一个简单的 CART:用体重和身高作为衡量性别的特征值。


[https://ainumeric.com/ml_training/course/machinelearning_xgboost.php]


树的最后一层称为结点,结点的值就是分数,或者结论。给定特征值,树的构造方法是非常多的。以上的例子从特征值“身高”开始分裂为树。如果从特征值“体重”开始分裂将会得到另一个树。也就是说,给定同样的特征值集合,可以运用不同的决策树,两棵树的结论累加就是最终的结论,即,同一个样本在不同树的结点的分数相加,即是最后的分数。


定义了决策树之后,XGBoost 的主要流程可以归结为一个不断迭代的过程,在步骤 t:


  • 增加新的树,记为 ft(x),用于拟合上次预测(步骤 t−1)的残差。关于树的选择,以最小化目标函数为目的。

  • 预测每个样本的分数:根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。

  • 每棵树对应的分数加起来就是该样本的预测值。

  • 计算损失函数,检查迭代终止条件,进入下一步迭代。
    增加一个树 ft(x) 时,ft(x) 的选择使得以下的目标函数最小化:
    objt=∑i=1nL(yi,y^i+ft(xi))+Ω(ft)
    其中, yi 是样本真实标签,y^i 是样本预测标签。目标函数中主要项的说明:


L(yi,y^i) 是损失函数,有不同的选择,比如 RMSE, Logistic 等等。


Ω(ft) 是具有以下形式的正则函数,
Ω(ft)=γT+12λ||w||2


上式中 T 是叶子结点的总数, w 是所有叶子结点的得分。这里我们使用 L2 范数,也可以使用 L1 范数。正则项定义了树的复杂度,目标函数在最小化损失函数的同时最小化复杂度,同时避免过度拟合。复杂度越低,模型的泛化能力也越强。


XGBoost 特性

顾名思义,XGBoost = Gradient Tree Boosting + Extreme,其中的 X 就是 Extreme 的意思。


Gradient Tree Boosting 是集成模型的一种,使用 CART 作为它的基本模型,从而定义损失函数 (loss function)。损失函数是度量模型性能的重要参数,而模型的最终目的是最小化损失。在 XGBoost 模型的迭代中,降低损失函数所用的算法是 Gradient Descent,而以下算法的引入使得普通的 Gradient Boosting 成为 Extreme Gradient Boosting,也就是 XGBoost 中 X 的含义:

  • Newton boosting and regularization (Newton Rhapson Method),在算法中同时利用损失函数的一阶和二阶泰勒展开。在以上的目标函数中,利用 f(x) 的泰勒展开:

f(x+Δx)= f(x)+f′(x)Δx+12f′′(x)Δx2


将目标函数写为

objt= ∑i=1n[L(yi,y^t−1i)+gift(xi)+12hif2t(xi)]+Ω(ft)


其中,
gi=∂L(yi,y^t−1)∂y^t−1,hi=∂2L(yi,y^t−1)∂(y^t−1)2


这里使用了一阶和二阶偏导,可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算,本质上也就把损失函数的选取和模型算法优化/参数选择分开了。这样的处理使得梯度下降的更快更准,同时增加了XGBoost的适用性。

  • 自定义的 loss function (损失函数的泰勒展开),从而使得运算加快。

  • 引入并行计算 (GPU, TPU),使得算法的实现适用于并行计算,加快运算速度。


一棵树的形成,是从一个结点一分为二,从而不断分裂形成一棵完整的树。以上的身高/体重例子中,从一个特征值分裂形成一棵树。当特征值众多的时候,分裂树结构的方法也变得多样化。在 XGBoost中,分裂结点的方法是枚举所有树结果的贪心算法。


在选择合适的树添加到模型中的迭代过程中,算法选择特征值进行分裂,计算损失函数;这样的操作重复多次,选择损失函数最小的树,将它添加到模型中。这个过程就是贪心算法,也就是遍历所有所有特征值的分裂形式,也就是子树,从中选择最优。


每次迭代,是在上一次预测基础上添加最优的特征值分裂形成的子树,直到满足迭代停止的条件。


迭代算法的终止条件


满足以下条件则迭代终止:

  • 树的深度达到预设的最大深度参数时,迭代停止。这样的设置用于避免过度拟合。

  • 每次迭代计算增益,当迭代所带来的增益小于预设的阈值时停止迭代。。

  • 当最小样本权重之和小于预设的阈值时,停止迭代。这样时为了防止叶子结点的样本太少,避免过度拟合。
    参数设置参考下面的 Python 实例。


XGBoost Python 实例

假设已有以下的训练和测试数据:

  • 训练数据:trainx: features of training data (ndarray)

  • 训练数据标签:trainy: targets of training data (ndarray)

  • 测试数据:mergeed_test: features of test data (no targets)


以下的命令行调用 XGBoost 回归模型:


# 加载软件包

import xgboost as xgb


# 初始化模型

model = XGBRegressor(max_depth=11, n_estimators=1000, min_child_weight=0.5, colsample_bytree=colsample, subsample=0.8, eta=0.04, seed=42)


# 调用模型拟合训练数据

model.fit(trianx, triany, eval_metric = 'rmse')


# 利用模型预测新数据

preds = model.predict(merged_test.values)


回归模型的主要参数设置:

  • max_depth: 每棵树的最大深度,可用于设置迭代终止条件

  • min_child_weight: 样本在子树中的最小权重之和,用于控制过度拟合

  • subsample: 每棵树的样本比率

  • eta: learning rate, robustness of shrinking weights each step. Usually: 0.01 – 0.2

  • seed: 随机数种子,缺省值=0


使用kaggle平台演示XGBoost的python实例:
https://www.kaggle.com/scratchpad/notebookeb4c164b1b/edit


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:boost 机器学习 environment Monte-carlo Programming

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 16:22