解释由x中的xgboost中的xgb.create.features()函数创建的功能

时间:2018-04-05 15:49:31

标签: r xgboost

我想知道如何解释R中xgboost包中xgb.create.features()创建的功能。

这是一个可重复的例子:

library(xgboost)

data(mtcars)
X = as.matrix(mtcars[, -9])
dtrain = xgb.DMatrix(data = X, label = Y)

model = xgb.train(data = dtrain, 
                  eval = "auc",
                  verbose =0,  maximize = TRUE, 
                  params = list(objective = "binary:logistic",
                                eta = 0.1,
                                max_depth = 6,
                                subsample = 0.8,
                                lambda = 0.1 ), 
                  nrounds = 10)

dtrain1 = xgb.create.features(model, X)
colnames(dtrain1)

'mpg' 'cyl' 'disp' 'hp' 'drat' 'wt' 'qsec' 'vs' 'gear' 'carb' 'V13' 'V14' 'V15' 'V16' 'V23' 'V24' 'V33' 'V34' 'V43' 'V44' 'V53' 'V54' 'V63' 'V64' 'V73' 'V74' 'V83' 'V84' 'V93' 'V94' 'V103' 'V104'

new_data = as.matrix(dtrain1)
new_data = data.frame(new_data)
head(new_data)

enter image description here

您的建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

你装了10棵树。这10棵树的叶子数量与V13 - V104柱子一样多。这些叶子是你的新变量。

假设第一棵树有4片叶子,而观察马自达RX4落入第2片叶子,它将被编码为0,1,0,0。对应的变量将是V13,V14,V15,V16。第二棵树也是如此。等等。

您可以根据变量名来得出哪些列对应于哪些树:
 ' V13' ' V14' ' V15' ' V16' - 第一棵树
 ' V23' ' V24' - 第二棵树
 ' V103' ' V104' - 第10棵树

如功能帮助中所述:

  

我们发现提升的决策树是一个强大的,非常   实现非线性和元组转换的便捷方法   我们刚刚描述的那种。我们将每棵树视为一棵树   分类特征,将叶子的索引作为值   实例最终落入。我们使用这种类型的1-K编码   特征。

     

例如,考虑图1中的提升树模型   有2个子树,第一个子树有3个叶子,第二个子树有2个   叶子。如果实例在第一个子树和叶子中的叶子2中结束   第二个子树中的1,线性分类器的总输入将   是二进制矢量\ code {[0,1,0,1,0}},其中前3个条目   对应于第一个子树的叶子,对应于第二个子树的叶子   第二个子树。

请注意,此变量集保证另一个超参数调整,并且容易过度拟合。在xgb.create.features之前和之后查看模型的要素重要性。