12分钟
Booster
1. Booster 是xgboost 的模型,它包含了训练、预测、评估等任务的底层实现。
xbgoost.Booster(params=None,cache=(),model_file=None)2. 属性: 通过方法来存取、设置属性。
3. 方法:
.attr(key): 获取booster的属性。如果该属性不存在,则返回None- 参数:
key: 一个字符串,表示要获取的属性的名字
- 参数:
.set_attr(**kwargs): 设置booster的属性- 参数:
kwargs: 关键字参数。注意:参数的值目前只支持字符串。 如果参数的值为None,则表示删除该参数
- 参数:
.attributes(): 以字典的形式返回booster的属性.set_param(params,value=None): 设置booster的参数- 参数:
params: 一个列表(元素为键值对)、一个字典、或者一个字符串。表示待设置的参数value: 如果params为字符串,那么params就是键,而value就是参数值。
- 参数:
.boost(dtrain,grad,hess): 执行一次训练迭代- 参数:
dtrain: 一个DMatrix对象,表示训练集grad: 一个列表,表示一阶的梯度hess: 一个列表,表示二阶的偏导数
- 参数:
.update(dtrain,iteration,fobj=None): 对一次迭代进行更新- 参数:
dtrain: 一个DMatrix对象,表示训练集iteration: 一个整数,表示当前的迭代步数编号fobj: 一个函数,表示自定义的目标函数
由于
Booster没有.train()方法,因此需要用下面的策略进行迭代:- 参数:
for i in range(0,100):
booster.update(train_matrix,iteration=i)该方法不是线程安全的。对于每个
booster来讲,你只能在某个线程中调用它的.predict方法。如果你在多个线程中调用.predict方法,则可能会有问题。 要想解决该问题,你必须在每个线程中调用booster.copy()来拷贝该booster到每个线程中
- 参数:
data: 一个DMatrix对象,表示测试集output_margin: 一个布尔值。表示是否输出原始的、未经过转换的margin valuentree_limit: 一个整数。表示使用多少棵子树来预测。默认值为0,表示使用所有的子树。 如果训练的时候发生了早停,则你可以使用booster.best_ntree_limit。pred_leaf: 一个布尔值。如果为True,则会输出每个样本在每个子树的哪个叶子上。它是一个nsample x ntrees的矩阵。 每个子树的叶节点都是从1开始编号的。pred_contribs: 一个布尔值。如果为True, 则输出每个特征对每个样本预测结果的贡献程度。它是一个nsample x ( nfeature+1)的矩阵。 之所以加1,是因为有bias的因素。它位于最后一列。 其中样本所有的贡献程度相加,就是该样本最终的预测的结果。approx_contribs: 一个布尔值。如果为True,则大致估算出每个特征的贡献程度。- 返回值:一个
ndarray,表示预测结果
4. Booster 没有 train 方法。因此有两种策略来获得训练好的 Booster
- 从训练好的模型的文件中
.load_model()来获取 - 多次调用
.update()方法
学员评价