R 캐럿 및 NA


26

나는 매개 변수 튜닝 기능과 균일 한 인터페이스에 대해 캐럿을 매우 선호하지만 적용된 "네이 키드"모델이 NA를 허용하더라도 항상 완전한 데이터 세트 (예 : NA가 없음)가 필요하다는 것을 관찰했습니다. 처음에는 필요하지 않은 힘든 대치 법을 적용해야한다는 점에서 매우 귀찮습니다. 어떻게 대치를 피하고 여전히 캐럿 이점을 사용할 수 있습니까?


3
항상 결 측값 이 있는 작업을 수행해야 합니다. 나는 당신의 질문을 정말로 이해하지 못한다고 말해야합니다-당신은 어떤 크기에 맞는 접근법을 찾고 있습니다. NA를 대치하고 싶지 않다면 NA와 무엇을하고 싶습니까? 지우다?

1
NA를 거기에두고 NA에 대처하기 위해 모델에 남겨두고 싶습니다. 예를 들어 C50에서 C5.0 함수로 수행하면 NA 자체에 대처할 수 있지만이 경우 C5를 사용하려고 할 때도 캐럿의 기차 함수가 데이터 세트에서 NA를 허용하지 않기 때문에 캐럿을 사용할 수 없습니다. 위에서 언급 한 C50의 0 기능.
Fredrik

3
그러나 "모델"이하는 것은이 데이터를 무시 (삭제)하여 더 작은 샘플로 남겨둔다는 것입니다. 그 값을 추정 (투입)합니다. 또는 "NA"범주를 예측합니다 (예 : 일부 트리 기반 모델). "모델"이 무엇을 하시겠습니까? 일부 소프트웨어는 자동으로 이러한 작업을 수행하지만 커피 머신이 "기본"커피를 제공했다고 가정합니다. 일부 소프트웨어는 "기본 커피"를 NA에서 생성하지만 얻을 수있는 최선은 아닙니다.

3
캐럿이 NA를 허용하지 않습니까? 기차 도움말 페이지의 기본 예제와 NA를 소개하려고 시도했지만 C5.0 기차는 정상적으로 작동했습니다. 임의 포리스트로 실패했습니다.
mpiktas

답변:


32

캐럿의 트레인 함수에 매개 변수 na.action = na.pass를 전달할 수 있으며 사전 처리는 수행 할 수 없습니다 (preProcess를 지정하지 말고 기본값 NULL로 두십시오). 이렇게하면 수정되지 않은 NA 값이 예측 함수로 직접 전달됩니다 (이로 인해 누락 된 값을 지원하지 않는 예측 함수가 실패합니다. 예측 함수를 호출하기 전에 누락 된 값을 대치하기 위해 preProcess를 지정해야하는 경우). 예를 들면 다음과 같습니다.

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

이 경우 C5.0은 누락 된 값을 자체적으로 처리합니다.


1
이것은 흥미로운 토론입니다. 범주 형 예측 변수에 NA를 다른 수준으로 추가 할 때의 함정은 무엇입니까? NA가 모델링되거나 대치 될 수없는 경우, 즉 부재의 존재가 실제로 유익한 경우, 단순히 NA를 추가 수준으로 만드는 것이 의미가있는 것처럼 보입니까?
Seanosapien

옵션 세트 를 train갖는 x, y 스펙을 사용하는 경우 na.action = na.pass다음 오류가 발생합니다.Something is wrong; all the RMSE metric values are missing
user29609

3

NA를 코딩 해 보셨습니까? 데이터 외부의 표준 편차가 3보다 크면 (예 : -12345) C5.0에서 NA와 같이 개별적으로 예측하도록 권장해야합니다.


2

귀하의 솔루션이 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,
       )

에서 http://www.inside-r.org/node/86978

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.