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


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