데이터 세트의 행 이름을 사용하여 새 열을 작성하여 caret::train()
을 실행하기 전에 누락 된 값이있는 사례를 식별 할 수 있습니다. 기본값은 데이터 프레임의 행 번호입니다.
그림으로 mlbench
패키지에서 설정 한 Sonar
데이터 사용 :
library(mlbench)
data(Sonar)
library(caret)
set.seed(95014)
# add row numbers
Sonar$rowId <- rownames(Sonar)
# create training & testing data sets
inTraining <- createDataPartition(Sonar$Class, p = .75, list=FALSE)
training <- Sonar[inTraining,]
testing <- Sonar[-inTraining,]
# set column 60 to NA for some values in test data
testing[48:51,60] <- NA
testing[!complete.cases(testing),"rowId"]
... 그리고 출력 :
> testing[!complete.cases(testing),"rowId"]
[1] "193" "194" "200" "206"
그런 다음 테스트 데이터의 행에 predict()
를 실행할 수 있습니다 완전한 케이스가있는 세트. 모델의 독립 변수에 대한 누락 된 값을 제거 할 수 있도록 전가 전략을 사용하는
fitControl <- trainControl(method = "cv",number = 3)
fit <- train(x,y, method="rf",data=Sonar,trControl = fitControl)
predicted <- predict(fit,testing[complete.cases(testing),])
이 상황을 처리하는 또 다른 방법입니다 : 다시 처리를 신속하게 임의의 숲 모델과 3 배의 교차 검증과 Sonar
데이터 집합을 사용하여 . Github에 대한 내 기사, Strategies for Handling Missing Values은이 주제에 대한 여러 연구 논문의 링크입니다.
안녕하세요, 귀하의 답변은 thx입니다! complete.cases를 사용하는 것은 확실한 옵션이지만 때로는 내 데이터 집합에 누락 값이 포함 된 열이 포함되어 있지만 열은 교육에 사용되지 않습니다. 솔루션을 사용하려면 먼저 해당 열을 제거해야합니다. 나는 주어진 데이터 세트 A를 알고 싶다. A의 예측에서 rownumber는 기본 데이터 세트를 변경하지 않고 대응한다. – Christoph
@Christoph - 출력 모델에서'colnames()'를 사용하여 테스트 데이터 세트의 열을 부분 집합 한 다음 나머지 열에'complete.cases()'를 사용하여 열이있는 테스트 데이터 세트에서 사례를 삭제하지 않도록 할 수 있습니다 모델에 없으면 누락되었습니다. –
안녕하세요, 늦게 답장을 보내주세요.예, 할 수는 있지만 추가 코드가 많이 필요하며 누락 된 행을 미리 필터링해야합니다. 그렇지 않으면 예를 들어 정확하게 일치시킬 수 없습니다. 예측 된 날짜 열. 차라리 나는 예측이 불가능할 때 NA로 입력 데이터와 동일한 길이의 예측 벡터를 얻거나 예측이 어느 행에 해당하는지 보여주는 ID를 얻습니다. – Christoph