саш*_*аша 13 python decision-tree boosting xgboost
我正在使用xgboost进行排名
param = {'objective':'rank:pairwise', 'booster':'gbtree'}
Run Code Online (Sandbox Code Playgroud)
据我所知,通过计算学习决策树的加权和来实现梯度增强.如何访问分配给每个学习助推器的权重?我想在训练后尝试对加权进行后处理,以加快预测步骤,但我不知道如何获得单独的权重.使用时dump_model()
,可以在创建的文件中看到不同的决策树,但不存储加权.在API中我没有找到合适的功能.或者我可以用收缩参数手动计算重量eta
吗?
dat*_*imp 21
eta
正如你所说,每棵树都有相同的权重,整体预测是每棵树预测的总和.
您可能期望较早的树比后面的树更重,但由于每棵树之后响应的更新方式,这是不必要的.这是一个玩具示例:
假设我们有5个观察结果,响应分别为10,20,30,40,50.构建第一棵树并给出12,18,27,39,54的预测.
现在,如果eta
= 1,传递给下一个树的响应变量将是-2,2,3,1,-4(即预测和真实响应之间的差异).然后,下一棵树将尝试学习第一棵树未捕获的"噪音".如果nrounds
= 2,那么来自两棵树的预测的总和将给出模型的最终预测.
如果相反eta
= 0.1,则所有树的预测都会按比例缩小eta
,因此第一棵树将改为"预测"1.2,1.8,2.7,3.9,5.4.传递给下一个树的响应变量将具有值8.8,18.2,27.3,36.1,44.6(缩放预测和真实响应之间的差异)然后第二轮使用这些响应值来构建另一个树 - 再次预测按比例缩放eta
.所以树2预测说,7,18,25,40,40,一旦缩放,就变成0.7,1.8,2.5,4.0,4.0.和以前一样,第三棵树将传递这些值与前一棵树的响应变量之间的差异(所以8.1,16.4,24.8,32.1.40.6).同样,来自所有树的预测总和将给出最终预测.
显然当eta
= 0.1,并且base_score
为0时,您需要至少10轮来获得任何接近合理的预测.一般来说,您需要绝对最少1/eta
轮,通常更多.
使用小的理由eta
是,模型可以从预测中采取小步骤而不是使树1完成大部分工作.它有点像结晶 - 慢慢冷却,你会变得更大,更好的水晶.缺点是需要增加nrounds
,从而增加算法的运行时间.