【问题标题】:Accessing gradient boosting tree weights in fitted model在拟合模型中访问梯度提升树权重
【发布时间】:2014-10-14 23:22:08
【问题描述】:

Gradient Boosting 学习了一个看起来像这样的函数:

F(X) = W1*T1(X) + W2*T2(X) + ... + Wi*Ti(X)

其中 Wi 是权重,Ti 是弱学习器(决策树)。我知道如何从 scikit-learn 中的拟合梯度提升模型中提取单个 Ti(estimators_ 属性),但是有没有办法提取 Wi?

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    嗯...Wi 由线搜索估计乘以学习率组成。 在 sklearn 中,学习率是恒定的,因此它被拉出。在梯度提升中,实际上为每个终端区域(又名叶子)分配了一个权重。这些估计值直接存储在树中,并在梯度提升模型的拟合过程中更新(参见 [1])。

    要访问第一棵树的终端区域的估计值,请执行以下操作::

    tree = gbrt.estimators_[0, 0].tree_
    leaf_mask = tree.children_left == TREE_LEAF  # TREE_LEAF == -1
    w_i = tree.value[leaf_mask, 0, 0]
    

    [1]https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/gradient_boosting.py#L197

    【讨论】:

    • 如果我的理解正确,因为权重被合并到树中,sklearn 中的拟合 GB 模型只是单个树的直接平均值?因为我以为我试过了,得到的答案与 gbrt.predict 不同。
    • 否 -- 它是每棵树的相应叶子估计值的总和,每个树的权重为学习率
    • 并且不要忘记初始模型(平方损失的平均值;对数损失的对数赔率)
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2019-05-08
    • 2020-04-10
    • 2016-06-29
    • 2020-12-21
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多