当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R embed step_discretize_xgb 使用 XgBoost 离散数值变量


step_discretize_xgb() 创建配方步骤的规范,该步骤将使用 XgBoost 模型以监督方式将数值数据(例如整数或双精度数)离散化到容器中。

用法

step_discretize_xgb(
  recipe,
  ...,
  role = NA,
  trained = FALSE,
  outcome = NULL,
  sample_val = 0.2,
  learn_rate = 0.3,
  num_breaks = 10,
  tree_depth = 1,
  min_n = 5,
  rules = NULL,
  skip = FALSE,
  id = rand_id("discretize_xgb")
)

参数

recipe

一个菜谱对象。该步骤将添加到此配方的操作序列中。

...

一个或多个选择器函数用于选择受该步骤影响的变量。有关更多详细信息,请参阅selections()

role

默认为 "predictor"

trained

指示预处理数量是否已估计的逻辑。

outcome

调用 vars 来指定使用哪个变量作为训练 XgBoost 模型的结果,以便离散化解释变量。

sample_val

用于验证(提前停止)学习到的分割的数据份额(其余用于训练)。默认为 0.20。

learn_rate

提升算法在迭代之间的适应速率。对应于eta在里面xgboost包。默认为 0.3。

num_breaks

最大用于存储连续特征的离散箱的数量。对应于max_bin在里面xgboost包。默认为 10。

tree_depth

树的最大深度(即分割数)。对应于max_depth在里面xgboost包。默认为 1。

min_n

每个节点中需要的最小实例数。对应于min_child_weight在里面xgboost包。默认为 5。

rules

为每个变量保留的最佳XgBoost树的分割规则。

skip

一个合乎逻辑的。当recipes::bake() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 recipes::prep() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用skip = TRUE时应小心,因为它可能会影响后续操作的计算

id

该步骤特有的字符串,用于标识它。

recipe 的更新版本,将新步骤添加到任何现有操作的序列中。

细节

step_discretize_xgb() 通过利用有关结果变量的信息并应用 xgboost 模型,从数值变量创建非均匀箱。建议在此步骤之前估算缺失值。此步骤特别适用于线性模型,因为通过创建非均匀箱,可以更轻松地从数据中学习非线性模式。

每个变量的桶的最佳选择是使用在xgboost包,这使得这种离散化方法容易出现过拟合。

底层 xgboost 的预定义值可以学习良好且相当复杂的结果。但是,如果希望调整它们,建议的路径是首先将 num_breaks 的值更改为:20 或 30。如果这没有给出令人满意的结果,则可以尝试修改 tree_depthmin_n 参数。请注意,不建议与其他参数同时调整learn_rate

此步骤需要xgboost包。如果未安装,该步骤将停止并显示有关安装包的注释。

请注意,原始数据将被新的 bin 替换。

整理

当您 tidy() 此步骤时,将返回包含 terms 列(选定的列)的 tibble,values

调整参数

此步骤有 5 个调整参数:

  • sample_val :用于验证的数据比例(类型:double,默认值:0.2)

  • learn_rate:学习率(类型:double,默认值:0.3)

  • num_breaks :分割点数(类型:整数,默认值:10)

  • tree_depth :树深度(类型:整数,默认值:1)

  • min_n:最小节点大小(类型:整数,默认值:5)

箱重

此步骤执行可以利用案例权重的监督操作。要使用它们,请参阅 recipes::case_weights 中的文档和 tidymodels.org 中的示例。

例子

library(rsample)
library(recipes)
data(credit_data, package = "modeldata")

set.seed(1234)
split <- initial_split(credit_data[1:1000, ], strata = "Status")

credit_data_tr <- training(split)
credit_data_te <- testing(split)

xgb_rec <-
  recipe(Status ~ Income + Assets, data = credit_data_tr) %>%
  step_impute_median(Income, Assets) %>%
  step_discretize_xgb(Income, Assets, outcome = "Status")

xgb_rec <- prep(xgb_rec, training = credit_data_tr)

bake(xgb_rec, credit_data_te, Assets)
#> # A tibble: 251 × 1
#>    Assets     
#>    <fct>      
#>  1 [3000,4000)
#>  2 [3000,4000)
#>  3 [9500, Inf]
#>  4 [3000,4000)
#>  5 [-Inf,2500)
#>  6 [-Inf,2500)
#>  7 [-Inf,2500)
#>  8 [4000,4500)
#>  9 [-Inf,2500)
#> 10 [3000,4000)
#> # ℹ 241 more rows
源代码:R/discretize_xgb.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Discretize numeric variables with XgBoost。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。