나는 매개 변수 튜닝 기능과 균일 한 인터페이스에 대해 캐럿을 매우 선호하지만 적용된 "네이 키드"모델이 NA를 허용하더라도 항상 완전한 데이터 세트 (예 : NA가 없음)가 필요하다는 것을 관찰했습니다. 처음에는 필요하지 않은 힘든 대치 법을 적용해야한다는 점에서 매우 귀찮습니다. 어떻게 대치를 피하고 여전히 캐럿 이점을 사용할 수 있습니까?
나는 매개 변수 튜닝 기능과 균일 한 인터페이스에 대해 캐럿을 매우 선호하지만 적용된 "네이 키드"모델이 NA를 허용하더라도 항상 완전한 데이터 세트 (예 : NA가 없음)가 필요하다는 것을 관찰했습니다. 처음에는 필요하지 않은 힘든 대치 법을 적용해야한다는 점에서 매우 귀찮습니다. 어떻게 대치를 피하고 여전히 캐럿 이점을 사용할 수 있습니까?
답변:
캐럿의 트레인 함수에 매개 변수 na.action = na.pass를 전달할 수 있으며 사전 처리는 수행 할 수 없습니다 (preProcess를 지정하지 말고 기본값 NULL로 두십시오). 이렇게하면 수정되지 않은 NA 값이 예측 함수로 직접 전달됩니다 (이로 인해 누락 된 값을 지원하지 않는 예측 함수가 실패합니다. 예측 함수를 호출하기 전에 누락 된 값을 대치하기 위해 preProcess를 지정해야하는 경우). 예를 들면 다음과 같습니다.
train(formula,
dataset,
method = "C5.0",
na.action = na.pass)
이 경우 C5.0은 누락 된 값을 자체적으로 처리합니다.
train
갖는 x, y 스펙을 사용하는 경우 na.action = na.pass
다음 오류가 발생합니다.Something is wrong; all the RMSE metric values are missing
귀하의 솔루션이 predict () 함수 를 사용하는 동안 값을 대치하는 것이라고 생각합니다 .
자세한 내용 ?predict.train
은 참조하십시오.
na.omit
캐럿이 값을 대치하도록 허용 하는 데 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
## S3 method for class 'train':
predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)
에서 http://www.inside-r.org/packages/cran/caret/docs/predict.train
또 다른 해결책은 데이터 를 전처리 하는 동안 대치하는 것입니다 .
## S3 method for class 'default':
preProcess(x,
method = "knnImpute", # or *bagImpute* / *medianImpute*
pcaComp = 10,
na.remove = TRUE,
k = 5,
knnSummary = mean,
outcome = NULL,
fudge = .2,
numUnique = 3,
verbose = TRUE,
)