Я пытаюсь создать парные взаимодействия между каждым полем набора данных для модели glmnet
без необходимости называть каждое поле по отдельности.Однако, когда он пытается выполнить это автоматически, он зацикливается на создании их для всех вариантов однозначно закодированных категориальных переменных против себя (например, он создает столбец взаимодействия между Gender_Male
и Gender_Female
, а затем может 'не может найти никаких значений, поэтому вся вещь заполняется NaN
s), что затем заставляет glmnet
выдать ошибку.
Вот пример кода:
library(dplyr)
library(tidyr)
library(rsample)
library(recipes)
library(glmnet)
head(credit_data)
t <- credit_data %>%
mutate(Status = as.character(Status)) %>%
mutate(Status = if_else(Status == "good", 1, 0)) %>%
drop_na()
set.seed(1234)
partitions <- initial_split(t, prop = 9/10, strata = "Status")
parsed_recipe <- recipe(Status ~ ., data = t) %>%
step_dummy(one_hot = TRUE, all_predictors(), -all_numeric()) %>%
step_interact(~.:.) %>% #My attempt to apply the interaction
step_scale(all_predictors()) %>%
prep(training = training(partitions))
train_data <- bake(parsed_recipe, new_data = training(partitions))
test_data <- bake(parsed_recipe, new_data = testing(partitions))
fit <- train_data %>%
select(-Status) %>%
as.matrix() %>%
glmnet(x = ., y = train_data$Status, family = "binomial", alpha = 0)
Когда я запускаюglmnet
раздел в конце, он дает мне эту ошибку:
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
NA/NaN/Inf in foreign function call (arg 5)
Посмотрев на этот вопрос, я понял, что должно быть NA
s / NaN
s вданные, поэтому я запустил summary(train_data)
, который выглядел так:
Итак, неудивительно, что glmnet
расстроен, ноЯ также не уверен, как это исправить.Я действительно не хочу определять каждую пару вручную.Есть ли команда recipes
для удаления столбцов потенциальных предикторов, содержащих NaN
s, может быть?