课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
12分钟

Booster

1. Boosterxgboost 的模型,它包含了训练、预测、评估等任务的底层实现。

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 value
    • ntree_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() 方法