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


R recipes step_dummy_extract 從名義數據中提取模式


step_dummy_extract() 創建配方步驟的規範,該步驟將標稱數據(例如字符或因子)轉換為提取級別的一個或多個整數模型項。

用法

step_dummy_extract(
  recipe,
  ...,
  role = "predictor",
  trained = FALSE,
  sep = NULL,
  pattern = NULL,
  threshold = 0,
  other = "other",
  naming = dummy_extract_names,
  levels = NULL,
  keep_original_cols = FALSE,
  skip = FALSE,
  id = rand_id("dummy_extract")
)

參數

recipe

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

...

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

role

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

trained

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

sep

包含用於拆分的正則表達式的字符向量。 strsplit() 用於執行拆分。如果還指定了pattern,則sep 優先。

pattern

包含用於提取的正則表達式的字符向量。 gregexpr()regmatches() 用於使用 perl = TRUE 執行模式提取。

threshold

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

other

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

naming

定義新虛擬列的命名約定的函數。請參閱下麵的詳細信息。

levels

包含為 terms 中包含的每個變量創建虛擬變量所需的信息的列表。在 prep() 訓練該步驟之前,這是 NULL

keep_original_cols

將原始變量保留在輸出中的邏輯。默認為 FALSE

skip

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

id

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

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

細節

step_dummy_extract() 將從字符變量創建一組整數虛擬變量,方法是通過拆分或提取來提取單個字符串,然後對這些字符串進行計數以創建計數變量。

請注意,threshold 在此步驟中以非常特定的方式工作。雖然一個標簽可以在同一行中出現多次,但在計算出現次數和頻率時隻會計算一次。

此配方步驟允許對結果變量進行靈活命名。對於名為 x 且級別為 "a""b" 的無序因子,默認命名約定是創建一個名為 x_b 的新變量。可以使用naming參數更改命名格式;函數 dummy_names() 是默認函數。

整理

當您tidy()此步驟時,將返回一個包含列terms(選擇的選擇器或原始變量)和columns(相應列的列表)的tibble。 columns 根據訓練數據集中的頻率進行排序。

箱重

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

例子

data(tate_text, package = "modeldata")

dummies <- recipe(~ artist + medium, data = tate_text) %>%
  step_dummy_extract(artist, medium, sep = ", ") %>%
  prep()

dummy_data <- bake(dummies, new_data = NULL)

dummy_data %>%
  select(starts_with("medium")) %>%
  names() %>%
  head()
#> [1] "medium_X1.person"                   
#> [2] "medium_X1.projection.and.1.monitor" 
#> [3] "medium_X100.digital.prints.on.paper"
#> [4] "medium_X100.works.on.paper"         
#> [5] "medium_X11.photographs"             
#> [6] "medium_X11.works.on.panel"          

# More detailed splitting
dummies_specific <- recipe(~medium, data = tate_text) %>%
  step_dummy_extract(medium, sep = "(, )|( and )|( on )") %>%
  prep()

dummy_data_specific <- bake(dummies_specific, new_data = NULL)

dummy_data_specific %>%
  select(starts_with("medium")) %>%
  names() %>%
  head()
#> [1] "medium_X1.monitor"          "medium_X1.person"          
#> [3] "medium_X1.projection"       "medium_X10.light.boxes"    
#> [5] "medium_X10.tranformers"     "medium_X100.digital.prints"

tidy(dummies, number = 1)
#> # A tibble: 2,673 × 3
#>    terms  columns id                 
#>    <chr>  <chr>   <chr>              
#>  1 artist Thomas  dummy_extract_mbqAp
#>  2 artist Schütte dummy_extract_mbqAp
#>  3 artist John    dummy_extract_mbqAp
#>  4 artist Akram   dummy_extract_mbqAp
#>  5 artist Zaatari dummy_extract_mbqAp
#>  6 artist Joseph  dummy_extract_mbqAp
#>  7 artist Beuys   dummy_extract_mbqAp
#>  8 artist Richard dummy_extract_mbqAp
#>  9 artist Ferrari dummy_extract_mbqAp
#> 10 artist León    dummy_extract_mbqAp
#> # ℹ 2,663 more rows
tidy(dummies_specific, number = 1)
#> # A tibble: 1,216 × 3
#>    terms  columns              id                 
#>    <chr>  <chr>                <chr>              
#>  1 medium paper                dummy_extract_oEGyP
#>  2 medium Etching              dummy_extract_oEGyP
#>  3 medium Photograph           dummy_extract_oEGyP
#>  4 medium colour               dummy_extract_oEGyP
#>  5 medium gelatin silver print dummy_extract_oEGyP
#>  6 medium Screenprint          dummy_extract_oEGyP
#>  7 medium Lithograph           dummy_extract_oEGyP
#>  8 medium on paper             dummy_extract_oEGyP
#>  9 medium canvas               dummy_extract_oEGyP
#> 10 medium aquatint             dummy_extract_oEGyP
#> # ℹ 1,206 more rows

# pattern argument can be useful to extract harder patterns
color_examples <- tibble(
  colors = c(
    "['red', 'blue']",
    "['red', 'blue', 'white']",
    "['blue', 'blue', 'blue']"
  )
)

dummies_color <- recipe(~colors, data = color_examples) %>%
  step_dummy_extract(colors, pattern = "(?<=')[^',]+(?=')") %>%
  prep()

dommies_data_color <- dummies_color %>%
  bake(new_data = NULL)

dommies_data_color
#> # A tibble: 3 × 4
#>   colors_blue colors_red colors_white colors_other
#>         <int>      <int>        <int>        <int>
#> 1           1          1            0            0
#> 2           1          1            1            0
#> 3           3          0            0            0
源代碼:R/dummy_extract.R

相關用法


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