【发布时间】: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
Gradient Boosting 学习了一个看起来像这样的函数:
F(X) = W1*T1(X) + W2*T2(X) + ... + Wi*Ti(X)
其中 Wi 是权重,Ti 是弱学习器(决策树)。我知道如何从 scikit-learn 中的拟合梯度提升模型中提取单个 Ti(estimators_ 属性),但是有没有办法提取 Wi?
【问题讨论】:
标签: scikit-learn
嗯...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
【讨论】: