當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。