о рецептах упаковки в R - PullRequest
       41

о рецептах упаковки в R

1 голос
/ 29 февраля 2020

Привет! Я использую рецепты для конструирования функций в моделях машинного обучения. Однако, когда я использовал step_dummy, фиктивные переменные считаются числовыми c переменными, а не фактором. Я думаю, это может быть проблематично c, когда мы используем случайный лес или другие модели деревьев. Как мы можем изменить это? PDP показывает, что фиктивный предиктор рассматривается как цифра c. таким образом, ось X имеет 0,25, 0,5 ....... Это должно иметь только 0 и 1 (начиная с фиктивного).

library(modeldata)
library(recipes)
library(caret)
library(ranger)
library(ggplot2)
library(pdp)

data(okc)
okc <- okc[complete.cases(okc),]

rec <- recipe(~ diet + age + height, data = okc)

dummies <- rec %>% step_dummy(diet)
dummies <- prep(dummies, training = okc)

dummy_data <- bake(dummies, new_data = okc)
summary(dummy_data)
dummy_data<-na.omit(dummy_data )
dummy_data<-dummy_data[1:2000,]

dummy_data$diet_strictly.anything<-factor(dummy_data$diet_strictly.anything)%>% factor(labels = c("No", "Yes"))

myTrainingControl <- trainControl(method = "cv", 
                                  number = 5, 
                                  savePredictions = TRUE, 
                                  classProbs = TRUE,
                                  summaryFunction = twoClassSummary,
                                  verboseIter = F)

fit_rf <- caret::train(diet_strictly.anything ~ .,   
                       data =dummy_data, 
                       method = "ranger",
                       tuneLength = 2,     
                       importance = "permutation",
                       trControl = myTrainingControl)


# Define a prediction function wrapper which requires two arguments
predict.function <- function(object, newdata) {
        predict(object, newdata, type="prob")[,2] %>% as.vector()
}

plt_ICE <- pdp::partial(fit_rf, 
                        pred.var = "diet_mostly.vegetarian", 
                        pred.fun = predict.function, 
                        train = dummy_data) %>% autoplot(alpha = 0.1)
plt_ICE

enter image description here

1 Ответ

0 голосов
/ 29 февраля 2020

Из документации step_dummy:

step_dummy создает спецификацию шага рецепта, которая преобразует номинальные данные (например, символ или факторы) в один или несколько числовых c терминов двоичной модели для уровни исходных данных.

В этом случае функция работает, как и ожидалось, путем преобразования категориальной переменной diet (сохраненной как тип character в данных okc ) в набор двоичных чисел c переменных, соответствующих уровням diet.

Если вы рассматриваете переменные как результаты (то есть пытаетесь предсказать, есть ли у кого-то определенный c тип диета), вы правы, что фиктивные переменные не должны кодироваться как цифры c. Если вы хотите изменить фиктивные манекены обратно на факторы, аккуратный подход может быть следующим:

library(tidyverse)
dummy_data <- dummy_data %>%
  mutate_at(vars(starts_with('diet')), list(as.factor))

Если вы используете эти фиктивные переменные в качестве предикторов, инструменты моделирования на основе дерева в R (Я в основном использовал rpart, randomForest и ranger) может обрабатывать фиктивные переменные как предикторы , закодированные как цифры c, и интерпретация показателей важности переменных будет такой же, как если переменные были закодированы как двухуровневые факторы или логические переменные.

...