您的浏览器版本过低,为保证更佳的浏览体验,请点击更新高版本浏览器

以后再说X

欢迎访问kaiyun体育登录网页入口

图片名

全国订购热线:
020-16217446981

主页 > 资讯公告 > 活动公告

活动公告
活动公告 公司新闻 健身指南 器材保养 常见问题

云开·全站appkaiyun官网 XGBoost学习(三):模型详解

作者:佚名 发布时间:2024-05-05 00:07:30 次浏览

云开·全站appkaiyun官网 XGBoost学习(三):模型详解文章浏览阅读7.5k次,点赞6次,收藏47次。1

XGBoost学习(一):原理

XGBoost学习(二):安装与介绍

XGBoost学习(三):模型详解

XGBoost学习(四):实战

XGBoost学习(五):参数调优

XGBoost学习(六):输出特征重要性和过滤特征

完整代码及其数据

1. Xgboost可以加载的各种数据格式分析

Xgboost可以加载多种数据格式的训练数据:

libsvm 格式的文本数据;
Numpy 的二维数组;
XGBoost 的二进制的缓存文件。加载的数据存储在对象 DMatrix 中。

下面列出:

#记载libsvm格式的数据
dtrain1 = xgb.DMatrix('train.svm.txt')
#记载二进制的缓存文件
dtrain2  = xgb.DMatrix('train.svm.buffer')
#加载numpy的数组
data = np.random.rand(5,10)                 # 5行10列数据集
label = np.random.randint(2,size=5)       # 二分类目标值
dtrain = xgb.DMatrix(data,label=label)    # 组成训练集
#将scipy.sparse格式的数据转化为Dmatrix格式
csr = scipy.sparse.csr_matrix((dat,(row,col)))
dtrain = xgb.DMatrix( csr )
#将Dmatrix格式的数据保存成Xgboost的二进制格式,在下次加载时可以提高加载速度,使用方法如下:
dtrain = xgb.DMatrix('train.svm.txt')
dtrain.save_binary("train.buffer")
#可以使用如下方式处理DMatrix中的缺失值
dtrain = xgb.DMatrix( data, label=label, missing = -999.0)
#当需要给样本设置权重时,可以用如下方式:
w = np.random.rand(5,1)
dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

2.Xgboost模型参数

Xgboost使用键值字典来存储参数

# xgboost模型
params = {
    'booster':'gbtree',
    'objective':'multi:softmax',   # 多分类问题
    'num_class':10,  # 类别数,与multi softmax并用
    'gamma':0.1,    # 用于控制是否后剪枝的参数,越大越保守,一般0.1 0.2的样子
    'max_depth':12,  # 构建树的深度,越大越容易过拟合
    'lambda':2,  # 控制模型复杂度的权重值的L2 正则化项参数,参数越大,模型越不容易过拟合
    'subsample':0.7, # 随机采样训练样本
    'colsample_bytree':3,# 这个参数默认为1,是每个叶子里面h的和至少是多少
    # 对于正负样本不均衡时的0-1分类而言,假设h在0.01附近,min_child_weight为1
    #意味着叶子节点中最少需要包含100个样本。这个参数非常影响结果,
    # 控制叶子节点中二阶导的和的最小值,该参数值越小,越容易过拟合
    'silent':0,  # 设置成1 则没有运行信息输入,最好是设置成0
    'eta':0.007,  # 如同学习率
    'seed':1000,
    'nthread':7,  #CPU线程数
    #'eval_metric':'auc'
}

运行Xgboost之前,必须设置三类参数:通用参数、Booster参数和任务参数:

一般参数:该参数控制在升压过程中使用哪个升压器。 常用的boosters包括树模型(tree)和线性模型(线性模型)。

助推器参数:这取决于使用哪个助推器

学习目标参数(TaskParameters):控制学习场景。 例如,在回归问题中,使用不同的参数来控制排序。

2.1、通用参数booster[default=gbtree]

有两种模型可供选择,gbtree 和 gblinear。 gbtree使用基于树的模型进行提升计算,gb Linear使用线性模型进行提升计算。 默认值为 gbtreesilent [default=0]

当设置为0时,表示打印运行时信息; 当设置为1时,表示以静默模式运行,不打印运行时信息。 默认值为 0

建议设置为0。过程中输出的数据有助于理解模型和调整参数。 另外,事实上,即使我将其设置为1云开·全站apply体育官方平台,它通常也无法静默运行。 。 nthread [如果未设置,则默认为最大可用线程数]

XGBoost运行时的线程数。默认值为当前系统可以获得的最大线程数

如果想以最大速度运行,建议不要设置该参数,模型会自动获取最大线程num_pbuffer【由xgboost自动设置开yun体育app官网入口登录,无需用户设置】

预测缓冲区的大小,通常设置为训练实例的数量。 缓冲区用于保存最后一个boosting步骤的预测结果。num_feature [由xgboost自动设置,无需用户设置]

提升过程中使用的特征维度设置为特征数量。 XGBoost会自动设置,无需手动设置 2.2、tree booster参数eta[默认值=0.3,别名:learning_rate]

为了防止过拟合,更新过程中使用了收缩步长。 每次boosting计算后,算法直接获得新特征的权重。 eta通过减少特征的权重,使得提升计算过程更加保守。 默认值为 0.3

取值范围为:[0,1]

通常,eta最终设置为0.01~0.2【默认值=0,别名:min_split_loss】(分割最小损失)

当节点分裂时,只有分裂后损失函数的值减小,该节点才会被分裂。 Gamma指定节点分裂所需的最小损失函数下降。 该参数值越大,算法越保守。 该参数的值与损失函数密切相关,因此需要调整。 范围:[0,无穷大] 范围:[0,无穷大]

默认情况下,模型仅在损失函数大于0时才划分节点,gamma给出所需的最小损失函数值。

gamma值使得算法更加保守,其值取决于损失函数,需要在模型中调整参数。 最大深度 [默认=6]

树的最大深度。 默认值为 6

取值范围为:[1,∞]

指树的最大深度

树的深度越大,对数据的拟合越好(过拟合程度越高)。也就是说,这个参数还控制过拟合。

建议通过交叉验证调整参数(xgb.cv)

通常值:3-10min_child_weight [默认=1]

子节点间样本权重之和最小。 如果某个叶子节点的样本权重之和小于min_child_weight,则分裂过程结束。 在当前的回归模型中,该参数是指构建每个模型所需的最小样本数。 算法越成熟,就越保守。 也就是说,增大这个参数可以控制过拟合。

取值范围为:[0,∞]max_delta_step [默认=0]

每棵树的权重估计中允许的最大增量步长。

如果该值设置为0,则表示没有约束。 如果设置为正数,有助于使模型在更新步长时更加保守。 通常情况下,这个参数不需要设置,但是当类别极度不平衡时,它对于训练逻辑回归模型很有帮助。 将其设置为 1-10 的值可能有助于控制更新。

取值范围为:[0,∞]subsample [default=1]

用于训练模型的子样本占整个样本集的比例。 如果设置为0.5,则意味着XGBoost会从整个样本集中随机抽取50%的子样本来构建树模型,这样可以防止过拟合。

取值范围为:(0,1]colsample_bytree [默认=1]

构建树时随机采样的特征的比例。 默认值为 1

取值范围:(0,1]colsample_bylevel[默认=1]

确定每个节点分区的子样本比例

通常不使用,因为subsample和colsample_bytree已经可以起到相同的作用scale_pos_weight[default=0]

大于0的值可以处理类别不平衡。 帮助模型更快收敛2.3、Linear Booster参数lambda[default=0]

L2正则惩罚系数

用于处理XGBoost的正则化部分。 通常不使用,但可用于减少过度拟合 alpha [默认=0]

L1正则惩罚系数

当数据维度极高时可以使用开yun体育app官网入口登录,使得算法运行速度更快。 lambda_bias

L2对bias的正则化。默认值为0(L1上没有对bias项进行正则化,因为bias在L1上并不重要) 2.4、学习目标参数

该参数用于控制理想的优化目标以及每一步结果的衡量方法。

目标 [默认=reg:线性]

定义学习任务和相应的学习目标。 可选的目标函数如下:

“reg:线性”——线性回归。

“reg:logistic”——逻辑回归。

“binary:logistic”——具有概率输出的二元逻辑回归问题。

“binary:logitraw” – 二元逻辑回归问题,输出结果为wTx。

“count:poisson” – 用于计数问题的泊松回归,输出结果是泊松分布。

在泊松回归中,max_delta_step的默认值为0.7。 (用于保障优化)

“multi:softmax” – 让XGBoost使用softmax目标函数来处理多分类问题,需要设置参数num_class(类别数)

“multi:softprob” – 与softmax相同,但输出是ndata * nclass的向量。 该向量可以被重塑为 ndata 行和 nclass 列的矩阵。 每行数据代表样本属于每个类别的概率。

“rank:pairwise” – 设置 XGBoost 通过最小化成对损失来执行排序任务 使用评分机制训练 base_score [ 默认=0.5 ]

所有实例的初始化预测分数,全局偏差;

对于足够次数的迭代,更改该值不会产生太大影响。 eval_metric [根据目标默认]

验证数据所需的评价指标。 不同的目标函数会有默认的评价指标(回归为rmse,分类为error,排名为meanaverage precision)

用户可以添加多种评价指标。 对于Python用户来说,需要将参数对以列表的形式传递给程序,而不是map参数。 列表参数不会覆盖“eval_metric”。

下面列出了选择:

“rmse”:均方根误差

“logloss”:负对数似然

“error”:二元分类错误率。 计算公式为#(错误案例)/#(所有案例)。 对于预测,评估会将预测值大于0.5的实例视为正实例,将其他实例视为负实例。

“merror”:多类分类错误率。 计算公式为#(错误案例)/#(所有案例)。

“mlogloss”:多类对数损失

“auc”:排名评估的曲线下面积。

“ndcg”:标准化贴现累积增益

“map”:平均精度

"ndcg@n","map@n": n 可以指定为整数以截断列表中的顶部位置以进行评估。

“ndcg-”、“map-”、“ndcg@n-”、“map@n-”:在XGBoost中,NDCG和MAP会将没有任何正样本的列表的得分评估为1。通过在中添加“-”评估指标 XGBoost 将把这些分数评估为 0,以在某些条件下保持一致。

重复训练seed [默认=0]

随机数的种子。 默认值为 0

可用于产生可重复的结果(每次使用相同的种子将导致相同的随机划分)

3. Xgboost基本方法及默认参数

xgboost.train(params,dtrain,num_boost_round=10,evals(),obj=None,
feval=None,maximize=False,early_stopping_rounds=None,evals_result=None,
verbose_eval=True,learning_rates=None,xgb_model=None)

parms:这是一个字典,包含训练中的参数关键字和对应值,形式为 parms = {'booster':'gbtree','eta':0.1}

dtrain:训练数据

num_boost_round:这是指boost迭代的次数

evals:这是一个列表,用于在训练期间评估列表中的元素。 形式为 evals = [(dtrain,'train'),(dval,'val')] 或 evals =[(dtrain,'train')]。 对于第一种情况,它允许我们在训练过程中观察对验证集的影响。

obj:自定义目的函数

feval:自定义评估函数

Maximize:是否最大化评价函数

Early_stopping_rounds:提前停止轮数,假设为100。如果验证集的误差达到一定程度并且无法在100次内继续减小,则停止迭代。 这要求 evals 中至少有一个元素。 如果有多个元素,则将使用最后一个。 返回的是最后的迭代次数(不是最好的迭代次数)。 如果early_stopping_rounds存在,模型会生成三个属性,bst.best_score、bst.best_iteration和bst.best_ntree_limit

evals_result:字典,对watchlist中存储的元素的评估结果

verbose_eval(可输入布尔型或数值型):还要求evals中至少有一个元素。 如果为True,则在result中输出evals中元素的评估结果; 如果输入一个数字,假设是5,那么每5次迭代输出一次。

Learning_rates:每次增加的学习率列表

xgb_model:xgb_model用于训练前加载

4.模型训练

有了参数列表和数据,就可以训练模型了

num_round = 10
bst = xgb.train( plst, dtrain, num_round, evallist )

5. 模型预测

# X_test类型可以是二维List,也可以是numpy的数组
dtest = DMatrix(X_test)
ans = model.predict(dtest)

完整代码如下:

xgb_model.get_booster().save_model('xgb.model')
tar = xgb.Booster(model_file='xgb.model')
x_test = xgb.DMatrix(x_test)
pre=tar.predict(x_test)
act=y_test
print(mean_squared_error(act, pre))

6. 保存模型

训练完成后,您可以保存模型并查看模型的内部结构。

bst.save_model('test.model')

导出模型和特征图(Map)

您可以将模型导出到txt文件并探索模型的含义:

# 导出模型到文件
bst.dump_model('dump.raw.txt')
# 导出模型和特征映射
bst.dump_model('dump.raw.txt','featmap.txt')

7.加载模型

模型可以按如下方式加载

bst = xgb.Booster({'nthread':4}) # init model
bst.load_model("model.bin")      # load data

图片名 客服