2017-12-04 8 views
1

데이터 세트에서 비슷한 논리로 아래에 게시 된 코드로 오류가 발생합니다. 나는 훈련 데이터의 수를 늘리려고했지만 해결하지는 못했다. 이미 모든 NA 값을 제외했습니다. model.frame.default에서R : 테스트 데이터로 예측할 때 새로운 레벨의 요소

오류 (약관 newData에, na.action = na.action, xlev = 개체 $의 xlevels) : 요인 y는이 새로운 수준의 L, X

set.seed(234) 
d <- data.frame(w=abs(rnorm(50)*1000), 
      x=rnorm(50), 
      y=sample(LETTERS[1:26], 50, replace=TRUE)) 



train_idx <- sample(1:nrow(d), floor(0.8*nrow(d))) 
train <- d[train_idx,] 
test <- d[-train_idx,] 



fit <- lm(w ~x + y, data=train) 
predict(fit, test) 

답변

1

내가 똑 바르게 솔루션 접근 방식으로 이동합니다이 오류가 팝업 이유의 이유를 설명 이미있다 이것은 당신의 문제를 해결할 것입니다!

+0

OP에 대해 무엇을하는지 설명하지 않았습니다. – zacdav

+0

@zacdav 그 이유는 내가 jdobres의 응답을 참조했기 때문이다. 그것은 그가 말한 것과 똑같은 문제의 해결책이다. 즉'test'에서'fit' 모델까지 레벨을 추가한다. 이걸 가지고있어. 건배! – Prem

+0

고마워요! 이것으로 문제가 해결되었습니다! – joerna

2

요인 및 문자 데이터는 범주 형 변수로 처리됩니다. 따라서 모델은 전에 보지 못했던 범주 레이블에 대한 예측을 형성 할 수 없습니다. "poodle"과 "pit bull"에 대한 예측 모델을 만들었다면 "골든 리트리버"를 주면 모델이 실패합니다.

예를 들어 구체적으로 말하면, 테스트 세트에있는 레이블 "L"과 "X"가 교육 세트에 나타나지 않는다는 오류가 있습니다. 그들은 훈련 세트에 없었으므로, 모델은 시험에서 이들을 만났을 때 무엇을해야할지 모릅니다.

은 그냥 predict

#add all levels of 'y' in 'test' dataset to fit$xlevels[["y"]] in the fit object 
fit$xlevels[["y"]] <- union(fit$xlevels[["y"]], levels(test[["y"]])) 

희망하기 전에 코드의 라인 아래 해보자 : @jdobres으로