如何使用 R 配方处理由于新因素水平引起的 NA?
How to handle NAs due to novel factor levels using R recipes?
我预处理了训练数据集 (A),现在想使用 R 方法为测试集 (B) 重现这些步骤。
问题是,测试集中有新的因子水平,我想忽略:
library(recipes)
(A <- data.frame(a = c(1:19, NA), b = factor(c(rep("l1",18), "l2", NA))))
(B <- data.frame(a = c(1:3, NA), b = factor(c("l1", "l2", NA, "l3"))))
rec.task <-
recipe(~ ., data = A) %>%
step_unknown(all_predictors(), -all_numeric()) %>%
step_medianimpute(all_numeric()) %>%
step_other(all_predictors(), -all_numeric(), threshold = 0.1, other=".merged") %>%
step_dummy(all_predictors(), -all_numeric())
tr.recipe <- prep(rec.task, training = A)
(AA <- juice(tr.recipe))
现在的问题是下面table中的NA:
(BB <- bake(tr.recipe, B))
a b_.merged
<dbl> <dbl>
1 1 0
2 2 1
3 3 1
4 10 NA
Warnmeldung:
There are new levels in a factor: NA
我可以在这些步骤中以某种方式避免它吗?我可以在 食谱程序中将零归因于 NA (我对基本 R 或 dplyr 解决方案不感兴趣)吗?
step_novel()
是解决方案。参见dummy variables vignette。
正如 topepo 所解释的,step_novel 函数是一个可能的解决方案。更改分配 rec.task 的代码,按以下方式
rec.task <-
recipe(~ ., data = A) %>%
step_novel(all_predictors(), -all_numeric()) %>%
step_unknown(all_predictors(), -all_numeric()) %>%
step_medianimpute(all_numeric()) %>%
step_other(all_predictors(), -all_numeric(), threshold = 0.1, other=".merged") %>%
step_dummy(all_predictors(), -all_numeric()) %>%
step_zv(all_predictors())
那么输出将是:
# A tibble: 4 x 2
a b_.merged
<dbl> <dbl>
1 1 0
2 2 1
3 3 1
4 10 1
我预处理了训练数据集 (A),现在想使用 R 方法为测试集 (B) 重现这些步骤。
问题是,测试集中有新的因子水平,我想忽略:
library(recipes)
(A <- data.frame(a = c(1:19, NA), b = factor(c(rep("l1",18), "l2", NA))))
(B <- data.frame(a = c(1:3, NA), b = factor(c("l1", "l2", NA, "l3"))))
rec.task <-
recipe(~ ., data = A) %>%
step_unknown(all_predictors(), -all_numeric()) %>%
step_medianimpute(all_numeric()) %>%
step_other(all_predictors(), -all_numeric(), threshold = 0.1, other=".merged") %>%
step_dummy(all_predictors(), -all_numeric())
tr.recipe <- prep(rec.task, training = A)
(AA <- juice(tr.recipe))
现在的问题是下面table中的NA:
(BB <- bake(tr.recipe, B))
a b_.merged
<dbl> <dbl>
1 1 0
2 2 1
3 3 1
4 10 NA
Warnmeldung:
There are new levels in a factor: NA
我可以在这些步骤中以某种方式避免它吗?我可以在 食谱程序中将零归因于 NA (我对基本 R 或 dplyr 解决方案不感兴趣)吗?
step_novel()
是解决方案。参见dummy variables vignette。
正如 topepo 所解释的,step_novel 函数是一个可能的解决方案。更改分配 rec.task 的代码,按以下方式
rec.task <-
recipe(~ ., data = A) %>%
step_novel(all_predictors(), -all_numeric()) %>%
step_unknown(all_predictors(), -all_numeric()) %>%
step_medianimpute(all_numeric()) %>%
step_other(all_predictors(), -all_numeric(), threshold = 0.1, other=".merged") %>%
step_dummy(all_predictors(), -all_numeric()) %>%
step_zv(all_predictors())
那么输出将是:
# A tibble: 4 x 2
a b_.merged
<dbl> <dbl>
1 1 0
2 2 1
3 3 1
4 10 1