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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。