函数apply()在scikit-learn中可以做什么?

时间:2016-01-07 07:41:02

标签: python machine-learning scikit-learn

在scikit-learn新版本中,Gradient boost中有一个名为apply()的新函数。我真的很困惑。

它是否喜欢facebook使用的方法:GBDT + LR? 如果剂量,我们如何让它像GBDT + LR一样工作?

2 个答案:

答案 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]
]

相应地处理其他列然后您可以得到您想要的。希望它会对你有所帮助!