我想知道如何解释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)
您的建议将不胜感激。
答案 0 :(得分:2)
假设第一棵树有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
之前和之后查看模型的要素重要性。