R에서 결 측값이있는 랜덤 포레스트를 사용하는 방법은 무엇입니까?
library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)
랜덤 포레스트 모델을 맞추고 싶지만이 오류가 발생합니다.
Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, :
missing values in object
16 개의 숫자 속성으로 데이터 프레임 학습이 있고 WIN은 레벨 0 1 인 요소입니다.
이 질문에 대한 나의 초기 반응은 "모든 사람"이 랜덤 포레스트가 예측 변수의 결 측값을 처리하지 않는다는 것을 알고 있기 때문에 많은 연구 노력을 보여주지 않았다는 것입니다. 그러나 확인하면서 ?randomForest
나는 이것에 대해 훨씬 더 분명해질 수 있음을 고백해야합니다.
( 문서에 링크 된 Breiman의 PDF 는 누락 된 값이 단순히 전혀 처리되지 않는다고 명시 적으로 설명합니다.)
공식 문서에서 확인할 수있는 유일한 단서는 na.action
매개 변수 의 기본값 이이며 na.fail
, 이는 신규 사용자에게는 너무 모호 할 수 있습니다.
어쨌든 예측 변수에 결 측값이있는 경우 (기본적으로) 두 가지 선택 사항이 있습니다.
- 다른 도구를 사용하십시오 (결
rpart
측값을 잘 처리합니다.) - 결 측값 대치
당연히 randomForest
패키지에는이 작업을 수행하는 기능이 rfImpute
있습니다. 의 문서 ?rfImpute
는 사용의 기본 예를 통해 실행됩니다.
소수의 케이스에만 결 측값이 na.action = na.omit
있는 경우 단순히 해당 케이스를 삭제하도록 설정할 수도 있습니다 .
그리고 물론,이 대답은 당신의 문제가 정말로 단순히 결 측값을 가지고 있다는 것입니다.
결 측값이 유익 할 가능성이있는 경우 결 측값을 입력하고 이진 변수 (사용 new.vars<-is.na(your_dataset)
) new.var
를 추가하고 오류를 낮추는 지 확인하고, 너무 커서 추가 your_dataset
할 수없는 경우 단독으로 사용할 수 있습니다. varImpPlot
하고 추가 your_dataset
에, 당신은 또한 하나의 변수를 추가 할 수 your_dataset
있는 수 계산 NA
'들new.var <- rowSums(new.vars)
누락 된 변수가 정보를 제공하는 경우 불완전한 대치 절차만으로 인한 모델 오류 증가를 수정할 수 있으므로 이것은 주제를 벗어난 대답이 아닙니다.
누락 된 값은 정보를 제공하고 무작위가 아닌 원인으로 인해 발생하며 특히 사회 실험 설정에서 일반적입니다.
randomForest 패키지의 기반이 되는 Breiman의 임의 포리스트 는 실제로 예측 변수의 결 측값을 처리합니다 . randomForest 패키지에서 다음을 설정할 수 있습니다.
na.action = na.roughfix
누락 된 값에 대해 중앙값 / 모드를 사용하여 시작하지만 포리스트를 성장시키고 근접성을 계산 한 다음 새로 채워진 값 등을 사용하여 포리스트를 반복하고 구성합니다. 이것은 randomForest 문서 (p10) 에 잘 설명되어 있지 않습니다 . 그것은 단지 상태
.... NAs는 열 중앙값으로 대체됩니다. .... 이것은 임의 포리스트에 의해 결 측값을 대치하는 시작점으로 사용됩니다.
Breiman 홈페이지 에서 좀 더 많은 정보를 찾을 수 있습니다.
missfill = 1,2는 훈련 세트 (1과 같으면)에 대해 누락 된 값을 빠르게 교체하고 더 신중한 교체 (2와 같으면)를 수행합니다.
mfixrep = k with missfill = 2는 느리지 만 일반적으로 훈련 세트에서만 k 반복이있는 근접성을 사용하는 대체를 더 효과적입니다. (nprox> 0 필요).
참고 URL : https://stackoverflow.com/questions/8370455/how-to-use-random-forests-in-r-with-missing-values
'programing' 카테고리의 다른 글
svn에 글로벌 무시 개념이 있습니까? (0) | 2020.11.08 |
---|---|
정적 배열을 초기화하는 방법은 무엇입니까? (0) | 2020.11.08 |
호출 방법에 관계없이 전체 실행을 중단하는 bash 함수를 작성하는 방법이 있습니까? (0) | 2020.11.08 |
Java에서 휘발성 키워드의 가장 간단하고 이해하기 쉬운 예 (0) | 2020.11.08 |
ES6 / 7에서 Arrow 함수를 내보낼 수 있습니까? (0) | 2020.11.08 |