gpt4 book ai didi

python-2.7 - 您可以从 scikit-learn 中的 DecisionTreeRegressor 获取选定的叶子吗

转载 作者:行者123 更新时间:2023-11-30 09:26:19 25 4
gpt4 key购买 nike

正在阅读本文great paper并尝试实现这一点:

...我们对待每一个人树作为一个分类特征,以实例最终落入的叶子的索引。我们使用 1-此类特征的 of-K 编码。例如,考虑图 1 中的提升树模型有 2 个子树,其中第一个子树有 3 个叶子,第二个子树有 2 个叶子。如果实例最终位于第一个子树的叶子 2 中,叶子 1 位于第二个子树,线性分类器的总体输入将是二元向量 [0, 1, 0, 1, 0],其中前 3 个条目对应于第一个子树和最后 2 个子树的叶子第二个子树的那些...

有人知道我如何预测一堆行,并为每一行获取集合中每棵树的选定叶子吗?对于这个用例,我并不真正关心节点代表什么,只关心它的索引。看了一下源代码,我无法很快看到任何明显的东西。我可以看到我需要迭代树并执行如下操作:

for sample in X_test:
for tree in gbc.estimators_:
leaf = tree.leaf_index(sample) # This is the function I need but don't think exists.
...

任何指示表示赞赏。

最佳答案

以下函数不仅可以识别决策树中选定的叶子,还可以实现引用论文中的应用程序。它的使用与引用论文相同,我在其中使用 GBC 进行特征工程。

def makeTreeBins(gbc, X):
'''
Takes in a GradientBoostingClassifier object (gbc) and a data frame (X).
Returns a numpy array of dim (rows(X), num_estimators), where each row represents the set of terminal nodes
that the record X[i] falls into across all estimators in the GBC.

Note, each tree produces 2^max_depth terminal nodes. I append a prefix to the terminal node id in each incremental
estimator so that I can use these as feature ids in other classifiers.
'''
for i, dt_i in enumerate(gbc.estimators_):

prefix = (i + 2)*100 #Must be an integer

nds = prefix + dt_i[0].tree_.apply(np.array(X).astype(np.float32))

if i == 0:
nd_mat = nds.reshape(len(nds), 1)

else:
nd_mat = np.hstack((nd, nds.reshape(len(nds), 1)))

return nd_mat

关于python-2.7 - 您可以从 scikit-learn 中的 DecisionTreeRegressor 获取选定的叶子吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com