XGBoost 核心数据结构和API(速查表)

XGBoost 核心数据结构和API

1. DMatrix

DMatrix 为XGBoost中数据存储的核心结构。训练数据和测试数据均需封装成 DMatrix 结构。

1.1 DMatrix 构造函数

DMatrix的构造函数包含8个参数:

  1. data (string/numpy array/scipy.sparse/pd.DataFrame/DataTable)

   DMatrix的数据源,当该值为字符串时,它表示数据源的文件路径

  1. label (list or numpy 1-D array, 可选)

   训练数据的标签

  1. missing (float, 可选)

   缺省值表示字符,如果没填, 默认值为:np.nan

  1. weight (list or numpy 1-D array , 可选)

   每个样本的权重

  1. silent (boolean, 可选)

   构造数据结构时是否显示日志

  1. feature_names (list, 可选)

   各个特征的名称

  1. feature_types (list, 可选)

   各个特征的数据类型

  1. nthread (integer, 可选)

   加载数据开启的线程数,如果为-1,代表启用系统允许的最大进程数

2. Booster

Booster为XGBoost中的模型类,提供了一些基础的函数,如模型加载、保存、评估和预测等方法。

2.1 Booster 核心方法

下面我们列举下Booster提供的核心方法:

1. load_model(fname)

从文件或内存中加载模型,参数含义如下:

  • fname (string or a memory buffer) – 模型文件名称或内存缓存对象

2. save_model(fname)

将模型保存到文件中,参数的含义如下:

  • fname (string) – 输出文件的名称

3. eval(data, name, iteration)

用给定的数据评估模型好坏,参数的含义如下:

  • data (DMatrix) – 用于评估模型的数据

  • name (str, 可选) – 用于评估模型的数据集名称

  • iteration (int, 可选) –迭代次数

该函数返回的结果如下:

  • result (string) 评估结果

4. predict(data, output_margin=False, ntree_limit=0, pred_leaf=False……)

预测给定数据的结果,参数的含义如下:

  • data (DMatrix)

   待预测的数据

  • output_margin (bool)

   是否输出原始未经转化的值

  • ntree_limit (int)

   用于预测的树的数量,默认为0,代表使用所有树进行预测

  • pred_leaf (bool)

   当启用该选项时,会输出一个(nsample, ntrees)矩阵,指明每条数据分别落到每棵树的哪个叶子节点上。

   比如样本1落在的第一颗树的3号节点,第二棵树的5号节点,第三棵树的2号节点,则该样本对应的记录为[3,5,2]

  • pred_contribs (bool)

   如果启用该选项,则会输出一个(nsample, nfeats + 1)矩阵,指明每个样本的每个特征对预测结果的贡献值

   注意最后一列为偏置大小。一个样本的所有特征贡献值加上偏置,就等于该样本的预测原始结果。

  • approx_contribs (bool)

   是否启用特征贡献大小的预估功能

  • pred_interactions (bool)

   当该选项设置为True时,会输出一个(nsample, nfeats + 1, nfeats + 1)矩阵,用于指明两两特征间相互影响的SHAP值

  • validate_features (bool)

   当该值为True时,会首先验证待预测的数据特征名称是否与模型中的特征名称相同,默认情况下,系统认为他们是相同的,不进行验证

该函数返回的结果如下:

  • prediction (numpy array) 预测结果

3. train函数

train函数是XGBoost最核心的函数,通过该函数训练预测模型。

3.1 train 函数参数

调用train函数时,可以传入以下参数:

  1. params (dict)

   配置参数,如目标函数,是否开启日志、每棵树的最大深度、学习率等,更多参数参加3.2,该参数为字典类型

  1. dtrain (DMatrix)

   用于训练的数据

  1. num_boost_round (int)

   训练的轮数,即生成的树的数量

  1. evals (list of pairs (DMatrix, string))

   训练时用于评估模型的数据集合,用户可以通过验证集来评估模型好坏,常见的格式为[(trainData,“train”), (evalData,“eval”)]

  1. obj (function)

   自定义的目标函数

  1. feval (function)

   自定义的评价函数

  1. maximize (bool)

   是否最大化评价指标

  1. early_stopping_rounds (int)

   激活早停止,当验证的错误率early_stopping_rounds轮未下降,则停止训练。

   启动早停止evals至少有一个评估数据集,如果有多个数据集,则用最后一个数据集进行评估。

   如果发生了早停止,则模型会提供三个额外的字段:bst.best_score, bst.best_iteration 和 bst.best_ntree_limit

  1. evals_result (dict)

   模型评估结果,字段形式。比如evals传入 [(dtest,‘eval’), (dtrain,‘train’)]而且参数中包含(‘eval_metric’: ‘logloss’), 则评估结果返回:

{‘train’: {‘logloss’: [‘0.48253’, ‘0.35953’]}, ‘eval’: {‘logloss’: [‘0.480385’, ‘0.357756’]}}

  1. verbose_eval (bool or int)

   是否打印评估日志

  1. learning_rates (list or function (deprecated - use callback API instead))

   学习率列表或者用于返回学习率的回调函数

  1. xgb_model (file name of stored xgb model or ‘Booster’ instance)

   预加载模型,在训练前加载之前训练的模型

  1. callbacks (list of callback functions)

   回调函数列表,每轮迭代结束后,都会调用该函数,比如重新设置学习率(参加回调函数实例)

3.2 配置参数

通过该参数来配置模型,如是否开启日志、树的最大深度、是否开启随机采样等

3.2.1 通用参数

  • booster [default= gbtree ]

   基础模型类型,默认为gbtree,可选参数包括: gbtree、gblinear、dart,其中gbtree、dart为树模型、gblinear为线性函数模型

  • silent [default=0]

   0 开启打印运行日志, 1 进入安静模式,不打印运行日志

  • nthread [默认为最大可用线程数]

   XGBoost并行运行的线程数,如果未设置,则最大化的启用可用先从

  • disable_default_eval_metric [default=0]

   是否禁用默认的衡量指标,当该值大于0时表示禁用默认衡量指标

  • num_pbuffer [由XGBoost自动设置, 无需手动设置]

   预测结果缓存大小,通常为训练样本的个数,该缓存用于存储最后一轮的预测结果。

  • num_feature [由XGBoost自动设置, 无需手动设置]

   XGBoost使用的特征维度,默认被设置成最大的特征维度

3.2.2 树形模型的参数

  • eta [默认值:0.3, 别名: 学习率]

   更新时使用的下降步长,用于防止过拟合。每轮迭代后,都会得到新的特征权重,通过eta来控制权重的减少量,从而增加模型的鲁棒性。

  • gamma [默认值:0, 别名: 分割的最小损失值]

   节点分裂需要下降的最小损失,低于该损失值时停止分裂。gamma值越大,算法越保守。

  • max_depth [默认值:6]

   树的最大深度。该值越大树的模型越复杂,越容易发生过拟合。如果该值为0,则意味着不限制树的深度。

   当grow_policy设置为depthwise时,该值必须设置。

  • min_child_weight [默认值:1]

   节点中样本的最小权重和,当节点中所有样本的权重和小于该值时,则停止分裂。在线性回归任务中,这个值就等于节点中最小的样本数量。

   该值越大,模型越保守,该值越小,模型越容易发生过拟合。

  • max_delta_step [默认值:0]

   每轮允许叶子输出值的最大增量。如果设置为0,则不限制,如果设置为正数,可以让模型更保守。

   通常我们无需设置该参数,但如果样本极不均衡,在逻辑回归中,会使用该参数,通常设置为1-10。

  • subsample [默认值:1]

   采样率,每轮训练使用的样本数量等于样本总数乘以采样率。

   比如采样率设置为0.5,意味着每轮训练只使用一半样本用作训练,这么做可以有效的防止过拟合。

  • colsample_bytree [默认值:1]

   每轮训练使用的特征占比。如果该值设置为0.5,意味着每轮训练只使用一半的特征用作训练。

  • ccolsample_bylevel [默认值:1]

   每层训练使用的特征占比。如果该值设置为0.5,意味着每次分裂只选用一半的特征。

  • lambda [默认值:1, 别名: L2正则项系数]

   L2正则化的权重系数,调大该值可以让模型更加保守

  • alpha [默认值:0, 别名: L1正则项系数]

   L1正则化的权重系数,调大该值可以让模型更加保守

  • tree_method string [默认值:auto]

   XGBoost中树的构造算法。分布式和外部存储版本只支持:tree_method=approx

   可选项包括: auto, exact, approx, hist, gpu_exact, gpu_hist

  • auto: 用启发式算法,选择最快速的构建算法

   针对小型到中型的数据集,将会使用精确的贪心算法: exact
   针对大型数据集,将会使用近似算法:approx
   之前单机运行时,总是使用 exact 算法,因此当使用 approx 算法时,会打印一条日志消息

  • exact: 精确贪心算法

  • approx: 近似贪心算法,使用分位数和梯度图

  • hist: 快速直方图优化的近似贪心算法,它用于一些性能改进的领域,如bins caching等

  • gpu_exact: GPU版本的精确贪心算法

  • gpu_hist: GPU版本的快速直方图方法

  • scale_pos_weight [默认值:1]

   用于控制正例和负例均衡的权重,该参数用于不均衡的数据,它的值通常设置为:负例总数/正例总数

3.2.3 线性模型的参数

  • lambda [默认值:1, 别名: L2正则项系数]

   L2正则化的权重系数,调大该值可以让模型更加保守

  • alpha [默认值:0, 别名: L1正则项系数]

   L1正则化的权重系数,调大该值可以让模型更加保守

  • updater [默认值:shotgun]

   线性模型的拟合算法

  • shotgun: 基于shotgun算法的坐标下降法

  • coord_descent: 普通的坐标下降法

  • feature_selector [默认值:cyclic]

   特征选择和排序算法

  • cyclic: 循环变量特征

  • shuffle: 类型与循环变量特征,但是在每次更新时都会随机打乱特征的顺序

  • random: 随机(带替换)的坐标选择器

  • greedy: 选择最大梯度的坐标

  • thrifty: 近似greedy的坐标选择器

  • top_k [默认值:0]

   greedy算法和thrifty算法选择的最优特征数量,0表示不限制。

3.2.4 学习相关参数

  • objective [默认值:reg:linear]

   训练的模型类型和目标函数

  • reg:linear: 线性回归

  • reg:logistic: 逻辑回归

  • binary:logistic: 二分类问题, 输出概率值

  • binary:logitraw: 二分类问题, 输出得分值,需要通过sigmoid函数转化成概率值

  • binary:hinge: 二分类问题,使用铰链损失函数,输出0或1,而不是概率值

  • count:poisson: 用于计数问题的泊松分布,输出泊松分布的均值。

  • survival:cox: Cox regression for right censored survival time data (negative values are considered right censored). Note that

  • multi:softmax: 多分类目标函数, 使用此目标函数,需要设置样本类别数据: num_class

  • multi:softprob: 同softmax, 但是输出的结果为 ndata * nclass 维的向量,表示样本属于每个类别的概率

  • base_score [默认值:0.5]

   初始时各个样本的得分,也就是全局的偏置

  • eval_metric [依据目标函数选择评估指标]

   验证数据集上的评估指标,默认评估指标依据目标函数选取

   用户也可以添加多个评估指标,多个评估指标需以list的形式传入

   可选值的评估指标如下:

  • rmse: 根均方误差

  • mae: 平均绝对值误差

  • logloss: 负的似然函数

  • error: 二分类问题的分类错误率

  • merror: 多分类问题的分类错误率

  • mlogloss: 多分类问题的负似然函数

  • auc: IOC曲线下面积

  • aucpr: PR曲线下面积

  • seed [默认值:0]

   随机数种子

你可能感兴趣的:(机器学习,人工智能)