2016-11-18 19 views
0

타겟 변수를 손상시키지 않으면 서 어떻게 캐럿에 dummy vars를 사용할 수 있습니까?캐럿 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) 

은 구매 변수가 없으므로 실패합니다. 예를 들어 data$Purchase <- ifelse(data$Purchase == "CH",1,0)으로 바꾸면 캐럿은 더 이상 분류가 아니라 회귀 문제가된다고 불평합니다

+0

'데이터 2의 class을 확인 $ Purchase <- data $ Purchase' 이후에 할 수 없습니까? – mtoto

+0

나는 그것을 시도했다 - 그러나 이것은 매트릭스의 결과를 왜곡하는 것 같다. dummyVars를 캐럿에서 열차로 직접 전달할 수 있습니까? 파이프 라인으로? –

답변

3

적어도 예제 코드에는 아래 주석에 표시된 몇 가지 문제가있는 것으로 보입니다. 귀하의 질문에 대답하려면

  • ifelse의 결과는 정수 벡터가 아닌 요소, 그래서 기차를 이용하여 함수에 직접 dummyVars 전달
  • 작업이 완료 회귀 기차 기능 기본값 (x는 = , Y = ...) 대신에 이러한 문제를 방지하기 위해 공식

의, 당신의 목적을주의 깊게

그냥 할 수있는
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'))