DMatrix 为XGBoost中数据存储的核心结构。训练数据和测试数据均需封装成 DMatrix 结构。
DMatrix的构造函数包含8个参数:
DMatrix的数据源,当该值为字符串时,它表示数据源的文件路径
训练数据的标签
缺省值表示字符,如果没填, 默认值为:np.nan
每个样本的权重
构造数据结构时是否显示日志
各个特征的名称
各个特征的数据类型
加载数据开启的线程数,如果为-1,代表启用系统允许的最大进程数
Booster为XGBoost中的模型类,提供了一些基础的函数,如模型加载、保存、评估和预测等方法。
下面我们列举下Booster提供的核心方法:
从文件或内存中加载模型,参数含义如下:
将模型保存到文件中,参数的含义如下:
用给定的数据评估模型好坏,参数的含义如下:
data (DMatrix) – 用于评估模型的数据
name (str, 可选) – 用于评估模型的数据集名称
iteration (int, 可选) –迭代次数
该函数返回的结果如下:
预测给定数据的结果,参数的含义如下:
待预测的数据
是否输出原始未经转化的值
用于预测的树的数量,默认为0,代表使用所有树进行预测
当启用该选项时,会输出一个(nsample, ntrees)矩阵,指明每条数据分别落到每棵树的哪个叶子节点上。
比如样本1落在的第一颗树的3号节点,第二棵树的5号节点,第三棵树的2号节点,则该样本对应的记录为[3,5,2]
如果启用该选项,则会输出一个(nsample, nfeats + 1)矩阵,指明每个样本的每个特征对预测结果的贡献值
注意最后一列为偏置大小。一个样本的所有特征贡献值加上偏置,就等于该样本的预测原始结果。
是否启用特征贡献大小的预估功能
当该选项设置为True时,会输出一个(nsample, nfeats + 1, nfeats + 1)矩阵,用于指明两两特征间相互影响的SHAP值
当该值为True时,会首先验证待预测的数据特征名称是否与模型中的特征名称相同,默认情况下,系统认为他们是相同的,不进行验证
该函数返回的结果如下:
train函数是XGBoost最核心的函数,通过该函数训练预测模型。
调用train函数时,可以传入以下参数:
配置参数,如目标函数,是否开启日志、每棵树的最大深度、学习率等,更多参数参加3.2,该参数为字典类型
用于训练的数据
训练的轮数,即生成的树的数量
训练时用于评估模型的数据集合,用户可以通过验证集来评估模型好坏,常见的格式为[(trainData,“train”), (evalData,“eval”)]
自定义的目标函数
自定义的评价函数
是否最大化评价指标
激活早停止,当验证的错误率early_stopping_rounds轮未下降,则停止训练。
启动早停止evals至少有一个评估数据集,如果有多个数据集,则用最后一个数据集进行评估。
如果发生了早停止,则模型会提供三个额外的字段:bst.best_score, bst.best_iteration 和 bst.best_ntree_limit
模型评估结果,字段形式。比如evals传入 [(dtest,‘eval’), (dtrain,‘train’)]而且参数中包含(‘eval_metric’: ‘logloss’), 则评估结果返回:
{‘train’: {‘logloss’: [‘0.48253’, ‘0.35953’]}, ‘eval’: {‘logloss’: [‘0.480385’, ‘0.357756’]}}
是否打印评估日志
学习率列表或者用于返回学习率的回调函数
预加载模型,在训练前加载之前训练的模型
回调函数列表,每轮迭代结束后,都会调用该函数,比如重新设置学习率(参加回调函数实例)
通过该参数来配置模型,如是否开启日志、树的最大深度、是否开启随机采样等
基础模型类型,默认为gbtree,可选参数包括: gbtree、gblinear、dart,其中gbtree、dart为树模型、gblinear为线性函数模型
0 开启打印运行日志, 1 进入安静模式,不打印运行日志
XGBoost并行运行的线程数,如果未设置,则最大化的启用可用先从
是否禁用默认的衡量指标,当该值大于0时表示禁用默认衡量指标
预测结果缓存大小,通常为训练样本的个数,该缓存用于存储最后一轮的预测结果。
XGBoost使用的特征维度,默认被设置成最大的特征维度
更新时使用的下降步长,用于防止过拟合。每轮迭代后,都会得到新的特征权重,通过eta来控制权重的减少量,从而增加模型的鲁棒性。
节点分裂需要下降的最小损失,低于该损失值时停止分裂。gamma值越大,算法越保守。
树的最大深度。该值越大树的模型越复杂,越容易发生过拟合。如果该值为0,则意味着不限制树的深度。
当grow_policy设置为depthwise时,该值必须设置。
节点中样本的最小权重和,当节点中所有样本的权重和小于该值时,则停止分裂。在线性回归任务中,这个值就等于节点中最小的样本数量。
该值越大,模型越保守,该值越小,模型越容易发生过拟合。
每轮允许叶子输出值的最大增量。如果设置为0,则不限制,如果设置为正数,可以让模型更保守。
通常我们无需设置该参数,但如果样本极不均衡,在逻辑回归中,会使用该参数,通常设置为1-10。
采样率,每轮训练使用的样本数量等于样本总数乘以采样率。
比如采样率设置为0.5,意味着每轮训练只使用一半样本用作训练,这么做可以有效的防止过拟合。
每轮训练使用的特征占比。如果该值设置为0.5,意味着每轮训练只使用一半的特征用作训练。
每层训练使用的特征占比。如果该值设置为0.5,意味着每次分裂只选用一半的特征。
L2正则化的权重系数,调大该值可以让模型更加保守
L1正则化的权重系数,调大该值可以让模型更加保守
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版本的快速直方图方法
用于控制正例和负例均衡的权重,该参数用于不均衡的数据,它的值通常设置为:负例总数/正例总数
L2正则化的权重系数,调大该值可以让模型更加保守
L1正则化的权重系数,调大该值可以让模型更加保守
线性模型的拟合算法
shotgun: 基于shotgun算法的坐标下降法
coord_descent: 普通的坐标下降法
特征选择和排序算法
cyclic: 循环变量特征
shuffle: 类型与循环变量特征,但是在每次更新时都会随机打乱特征的顺序
random: 随机(带替换)的坐标选择器
greedy: 选择最大梯度的坐标
thrifty: 近似greedy的坐标选择器
greedy算法和thrifty算法选择的最优特征数量,0表示不限制。
训练的模型类型和目标函数
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 维的向量,表示样本属于每个类别的概率
初始时各个样本的得分,也就是全局的偏置
验证数据集上的评估指标,默认评估指标依据目标函数选取
用户也可以添加多个评估指标,多个评估指标需以list的形式传入
可选值的评估指标如下:
rmse: 根均方误差
mae: 平均绝对值误差
logloss: 负的似然函数
error: 二分类问题的分类错误率
merror: 多分类问题的分类错误率
mlogloss: 多分类问题的负似然函数
auc: IOC曲线下面积
aucpr: PR曲线下面积
随机数种子