【问题标题】:Interpreting features created by xgb.create.features() function in xgboost in R解释 R 中 xgboost 中由 xgb.create.features() 函数创建的特征
【发布时间】:2020-06-07 06:34:08
【问题描述】:

如何解释 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)

【问题讨论】:

    标签: r xgboost


    【解决方案1】:

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

    假设第一棵树有 4 片叶子,而 Observation Mazda RX4 落入第二片叶子,它会被编码为 0、1、0、0。与此对应的变量将是 V13、V14、V15、V16。第二棵树也是如此,以此类推。

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

    如函数帮助中所述:

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

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

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

    【讨论】:

    • 当您说“检查特征重要性”时,是否意味着如果新变量出现在新特征重要性的顶部(xgb.create.features之后),它可能是关于过度拟合的警告?
    • @demarsylvain 不一定。你可以通过nested re-sampling来检查过拟合。
    • 我虽然有一些新的检查,但我已经在使用交叉验证。谢谢你。另一个问题:如果我增加模型的迭代次数,比如说1000,xgb.create.features 会创建很多特征。是否有减少这种情况的提示,或者最好的方法是创建所有这些?
    • 我不认为很多树会有好处,但你需要尝试一下。顺便说一句,在所有训练数据上使用xgb.create.features,然后在第二步通过交叉验证评估模型会导致您得出错误的结论(数据泄漏)。
    • 为了评估xgb.create.features 的有用性,您需要在CV 的每一折中执行它。
    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2022-01-19
    相关资源
    最近更新 更多