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


R recipes step_other 折疊一些分類級別


step_other() 創建配方步驟的規範,該步驟可能會將不經常出現的值匯集到 "other" 類別中。

用法

step_other(
  recipe,
  ...,
  role = NA,
  trained = FALSE,
  threshold = 0.05,
  other = "other",
  objects = NULL,
  skip = FALSE,
  id = rand_id("other")
)

參數

recipe

一個菜譜對象。該步驟將添加到此配方的操作序列中。

...

一個或多個選擇器函數用於為此步驟選擇變量。有關更多詳細信息,請參閱selections()

role

由於沒有創建新變量,因此此步驟未使用。

trained

指示預處理數量是否已估計的邏輯。

threshold

0 到 1 之間的數值,或者大於或等於 1 的整數。如果小於 1,則訓練集中出現率低於 threshold 的因子級別將被匯集到 other 。如果大於或等於 1,則該值被視為頻率,出現次數少於 threshold 的因子水平將被匯集到 other

other

"other" 類別的單個字符值。

objects

包含信息的對象列表,用於池化由 prep() 確定的不常見級別。

skip

一個合乎邏輯的。當bake() 烘焙食譜時是否應該跳過此步驟?雖然所有操作都是在 prep() 運行時烘焙的,但某些操作可能無法對新數據進行(例如處理結果變量)。使用skip = TRUE時應小心,因為它可能會影響後續操作的計算。

id

該步驟特有的字符串,用於標識它。

recipe 的更新版本,將新步驟添加到任何現有操作的序列中。

細節

計算類別的總體比例(或總計數)。 "other" 類別用於代替訓練集中個體比例(或頻率)小於 threshold 的任何分類級別。

如果未進行池化,則數據不會被修改(盡管字符數據可能會根據 prep() 中的 strings_as_factors 的值更改為因子)。否則,始終會返回具有不同因子級別的因子。

如果 threshold 小於最大類別比例,則除最常見級別之外的所有級別都將折疊到 other 級別。

如果保留的類別包含 other 的值,則會引發錯誤。如果other在丟棄級別列表中,則不會發生錯誤。

如果不進行合並,新因子水平將轉換為缺失。如果需要合並,它們將被放入另一個類別。

當要處理的數據包含新級別(即不包含在訓練集中)時,會分配另一個類別。

整理

當您tidy()此步驟時,將返回一個包含列terms(將受影響的列)和retained(未拉入"other"的因子水平)的小標題。

調整參數

此步驟有 1 個調整參數:

  • threshold:閾值(類型:double,默認值:0.05)

箱重

此步驟執行可以利用案例權重的無監督操作。因此,個案權重僅與頻率權重一起使用。有關更多信息,請參閱 case_weights 中的文檔和 tidymodels.org 中的示例。

例子

data(Sacramento, package = "modeldata")

set.seed(19)
in_train <- sample(1:nrow(Sacramento), size = 800)

sacr_tr <- Sacramento[in_train, ]
sacr_te <- Sacramento[-in_train, ]

rec <- recipe(~ city + zip, data = sacr_tr)


rec <- rec %>%
  step_other(city, zip, threshold = .1, other = "other values")
rec <- prep(rec, training = sacr_tr)

collapsed <- bake(rec, sacr_te)
table(sacr_te$city, collapsed$city, useNA = "always")
#>                  
#>                   ELK_GROVE SACRAMENTO other values <NA>
#>   ANTELOPE                0          0            3    0
#>   AUBURN                  0          0            0    0
#>   CAMERON_PARK            0          0            1    0
#>   CARMICHAEL              0          0            2    0
#>   CITRUS_HEIGHTS          0          0            6    0
#>   COOL                    0          0            0    0
#>   DIAMOND_SPRINGS         0          0            1    0
#>   EL_DORADO               0          0            1    0
#>   EL_DORADO_HILLS         0          0            4    0
#>   ELK_GROVE              16          0            0    0
#>   ELVERTA                 0          0            1    0
#>   FAIR_OAKS               0          0            0    0
#>   FOLSOM                  0          0            3    0
#>   FORESTHILL              0          0            0    0
#>   GALT                    0          0            2    0
#>   GARDEN_VALLEY           0          0            0    0
#>   GOLD_RIVER              0          0            1    0
#>   GRANITE_BAY             0          0            0    0
#>   GREENWOOD               0          0            0    0
#>   LINCOLN                 0          0            1    0
#>   LOOMIS                  0          0            0    0
#>   MATHER                  0          0            0    0
#>   MEADOW_VISTA            0          0            0    0
#>   NORTH_HIGHLANDS         0          0            4    0
#>   ORANGEVALE              0          0            1    0
#>   PENRYN                  0          0            0    0
#>   PLACERVILLE             0          0            1    0
#>   POLLOCK_PINES           0          0            0    0
#>   RANCHO_CORDOVA          0          0            1    0
#>   RANCHO_MURIETA          0          0            1    0
#>   RIO_LINDA               0          0            0    0
#>   ROCKLIN                 0          0            2    0
#>   ROSEVILLE               0          0            9    0
#>   SACRAMENTO              0         71            0    0
#>   WALNUT_GROVE            0          0            0    0
#>   WEST_SACRAMENTO         0          0            0    0
#>   WILTON                  0          0            0    0
#>   <NA>                    0          0            0    0

tidy(rec, number = 1)
#> # A tibble: 3 × 3
#>   terms retained   id         
#>   <chr> <chr>      <chr>      
#> 1 city  ELK_GROVE  other_HsPSC
#> 2 city  SACRAMENTO other_HsPSC
#> 3 zip   z95823     other_HsPSC

# novel levels are also "othered"
tahiti <- Sacramento[1, ]
tahiti$zip <- "a magical place"
bake(rec, tahiti)
#> Warning:  There was 1 column that was a factor when the recipe was prepped:
#>  'zip'.
#>  This may cause errors when processing new data.
#> # A tibble: 1 × 2
#>   city       zip         
#>   <fct>      <fct>       
#> 1 SACRAMENTO other values

# threshold as a frequency
rec <- recipe(~ city + zip, data = sacr_tr)

rec <- rec %>%
  step_other(city, zip, threshold = 2000, other = "other values")
rec <- prep(rec, training = sacr_tr)

tidy(rec, number = 1)
#> # A tibble: 2 × 3
#>   terms retained   id         
#>   <chr> <chr>      <chr>      
#> 1 city  SACRAMENTO other_2VUP1
#> 2 zip   z95823     other_2VUP1
# compare it to
# sacr_tr %>% count(city, sort = TRUE) %>% top_n(4)
# sacr_tr %>% count(zip, sort = TRUE) %>% top_n(3)
源代碼:R/other.R

相關用法


注:本文由純淨天空篩選整理自Max Kuhn等大神的英文原創作品 Collapse Some Categorical Levels。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。