2016-11-18 9 views
0

Как я могу использовать фиктивные вары в карете, не разрушая мою целевую переменную?cant dummy-vars исключить цель

set.seed(5) 
data <- ISLR::OJ 
data<-na.omit(data) 

dummies <- dummyVars(Purchase ~ ., data = data) 
data2 <- predict(dummies, newdata = data) 
split_factor = 0.5 
n_samples = nrow(data2) 
train_idx <- sample(seq_len(n_samples), size = floor(split_factor * n_samples)) 
train <- data2[train_idx, ] 
test <- data2[-train_idx, ] 
modelFit<- train(Purchase~ ., method='lda',preProcess=c('scale', 'center'), data=train) 

не будет работать, поскольку отсутствует переменная Purchase. В случае, если я заменил его data$Purchase <- ifelse(data$Purchase == "CH",1,0) заранее, карат жалуется, что это уже не классификация, а проблема регрессии

+0

вы можете просто сделать 'data2 $ Приобретение <- data $ Buy' впоследствии не так ли? – mtoto

+0

Я пробовал это - но это, похоже, искажает результат матрицы. Можно ли передать фиктивные вары из каретки прямо в поезд? как трубопровод? –

ответ

3

По крайней мере, в примере кода есть несколько проблем, указанных в комментариях ниже. Для того, чтобы ответить на ваши вопросы:

  • Результат ifelse является целочисленный вектор, не является фактором, поэтому функция поезда по умолчанию регрессии
  • Миновав dummyVars непосредственно к функции осуществляется с помощью поезда (х = , у =, ...) вместо формулы

Чтобы избежать этих проблем, проверьте class ваших объектов тщательно

set.seed(5) 
data <- ISLR::OJ 
data<-na.omit(data) 

# Make sure that all variables that should be a factor are defined as such 
newFactorIndex <- c("StoreID","SpecialCH","SpecialMM","STORE") 
data[, newFactorIndex] <- lapply(data[,newFactorIndex], factor) 

# See help for dummyVars. The function does not take a dependent variable and predict will give an error 
dummies <- dummyVars(~., data = data[,-1]) 
# The output of predict is a matrix, change it to data frame 
data2 <- data.frame(predict(dummies, newdata = data)) 

split_factor = 0.5 
n_samples = nrow(data2) 
train_idx <- sample(seq_len(n_samples), size = floor(split_factor * n_samples)) 

train <- data2[train_idx, ] 
test <- data2[-train_idx, ] 

# Option 1 (as asked): Specify independent and dependent variables separately 
modelFit<- train(y = data[train_idx, "Purchase"], x = data2[train_idx,], method='lda',preProcess=c('scale', 'center')) 

# Option 2: Append dependent variable to the independent variables (needs to be a data frame to allow factor and numeric) 
data2$Purchase <- data$Purchase[train_idx] 
modelFit<- train(Purchase ~., data = data2, method='lda',preProcess=c('scale', 'center')) 

 Смежные вопросы

  • Нет связанных вопросов^_^