在scikit-learn新版本中,Gradient boost中有一个名为apply()
的新函数。我真的很困惑。
它是否喜欢facebook使用的方法:GBDT + LR
?
如果剂量,我们如何让它像GBDT + LR
一样工作?
答案 0 :(得分:2)
来自Sci-Kit文档
apply(X)将整体中的树应用于X,返回叶索引
此函数将获取输入数据X,其中的每个数据点(x)将应用于每个非线性分类器树。在应用之后,数据点x将与它相关联的叶子为每个决策树结束。此叶子将具有其关联的类(如果是二进制,则为1)。
apply(X)
会返回上述信息,其格式为[n_samples, n_estimators, n_classes]
。
因此,apply(X)
函数与Gradient Boosted决策树+逻辑回归(GBDT + LR)分类和特征变换方法实际上并没有多大关系。它是将数据应用于现有分类模型的功能。
对不起,如果我以任何方式误解你,虽然你的问题中的一些语法/语法错误使得解密更难。
答案 1 :(得分:1)
apply(X)返回树叶的原始索引,我认为您需要将离散索引转换为单热编码样式,然后您可以执行lr步骤。 例如,apply(X)将返回
[
[[1], [2], [3], [4]],
[[2], [3], [4], [5]],
[[3], [4], [5], [6]]
]
其中n_samples = 3,n_estimators = 4,n_classes = 1。 您必须首先知道gbm分类器中使用的每棵树的数量。众所周知,gbm使用sklearn决策树回归量,根据sklearn决策树回归函数应用函数,我们得到:
X_leaves:array_like,shape = [n_samples,] 对于X中的每个数据点x,返回叶x的索引 结束了。叶子在里面编号
[0; self.tree_.node_count)
,可能有差距 编号
因此,您需要将零填充到其他索引中。以上例为例,如果第一棵树的tree_.node_count = 5,那么三个样本的第一列应该转移到:
[
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0]
]
相应地处理其他列然后您可以得到您想要的。希望它会对你有所帮助!