랜덤 포레스트 및 예측


14

Random Forest의 작동 방식을 이해하려고합니다. 나는 나무가 어떻게 만들어지는 지에 대해 이해하고 있지만 랜덤 포레스트가 가방 밖에서 어떻게 예측을하는지 이해할 수 없습니다. 누구든지 간단한 설명을 해 주시겠습니까? :)

답변:


17

포리스트의 각 트리는 훈련 데이터에있는 관측치의 부트 스트랩 샘플로 구축됩니다. 부트 스트랩 샘플의 관찰은 트리를 구축하는 반면 부트 스트랩 샘플에없는 관찰은 백 밖 (또는 OOB) 샘플을 형성합니다.

트리를 작성하는 데 사용 된 데이터에서 OOB 샘플의 경우와 동일한 변수를 사용할 수 있음을 분명히해야합니다. OOB 샘플에 대한 예측을 얻기 위해 각 트리는 현재 트리로 전달되고 트리의 규칙은 터미널 노드에 도달 할 때까지 따릅니다. 그러면 해당 특정 트리에 대한 OOB 예측이 생성됩니다.

이 과정은 여러 번 반복되며, 각 트리는 훈련 데이터 및 새로운 OOB 샘플에 대한 예측으로부터 새로운 부트 스트랩 샘플을 학습합니다.

나무의 수가 증가함에 따라 하나의 샘플이 OOB 샘플에 두 번 이상있을 것이므로 샘플이 OOB에있는 N 개의 트리에 대한 예측의 "평균"은 각 트레이닝 샘플에 대한 OOB 예측으로 사용됩니다. 나무 1, ..., N. "평균"으로 우리는 연속 응답에 대한 예측 평균을 사용하거나 다 수표가 범주 형 응답에 사용될 수 있습니다 (대표 표는 나무 1, ..., N).

예를 들어, 10 그루의 훈련 세트에서 10 개의 샘플에 대해 다음과 같은 OOB 예측이 있다고 가정합니다.

set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p

> oob.p
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA     7     8     2     1    NA     5     3      2
samp2      6    NA     5     7     3    NA    NA    NA    NA     NA
samp3      3    NA     5    NA    NA    NA     3     5    NA     NA
samp4      6    NA    10     6    NA    NA     3    NA     6     NA
samp5     NA     2    NA    NA     2    NA     6     4    NA     NA
samp6     NA     7    NA     4    NA     2     4     2    NA     NA
samp7     NA    NA    NA     5    NA    NA    NA     3     9      5
samp8      7     1     4    NA    NA     5     6    NA     7     NA
samp9      4    NA    NA     3    NA     7     6     3    NA     NA
samp10     4     8     2     2    NA    NA     4    NA    NA      4

여기서 NA샘플은 해당 트리의 학습 데이터에있었습니다 (즉, OOB 샘플에 없음).

NA각 행 에 대한 비값의 평균은 전체 포리스트에 대해 각 샘플에 대한 OOB 예측을 제공합니다.

> rowMeans(oob.p, na.rm = TRUE)
 samp1  samp2  samp3  samp4  samp5  samp6  samp7  samp8  samp9 samp10 
  4.00   5.25   4.00   6.20   3.50   3.80   5.50   5.00   4.60   4.00

각 트리가 포리스트에 추가되면 해당 트리를 포함하여 OOB 오류를 계산할 수 있습니다. 예를 들어, 다음은 각 샘플에 대한 누적 수단입니다.

FUN <- function(x) {
  na <- is.na(x)
  cs <- cumsum(x[!na]) / seq_len(sum(!na))
  x[!na] <- cs
  x
}
t(apply(oob.p, 1, FUN))

> print(t(apply(oob.p, 1, FUN)), digits = 3)
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA  7.00  7.50  5.67  4.50    NA   4.6  4.33    4.0
samp2      6    NA  5.50  6.00  5.25    NA    NA    NA    NA     NA
samp3      3    NA  4.00    NA    NA    NA  3.67   4.0    NA     NA
samp4      6    NA  8.00  7.33    NA    NA  6.25    NA  6.20     NA
samp5     NA     2    NA    NA  2.00    NA  3.33   3.5    NA     NA
samp6     NA     7    NA  5.50    NA  4.33  4.25   3.8    NA     NA
samp7     NA    NA    NA  5.00    NA    NA    NA   4.0  5.67    5.5
samp8      7     4  4.00    NA    NA  4.25  4.60    NA  5.00     NA
samp9      4    NA    NA  3.50    NA  4.67  5.00   4.6    NA     NA
samp10     4     6  4.67  4.00    NA    NA  4.00    NA    NA    4.0

이런 식으로 우리는 예측이 주어진 반복까지 숲의 N 개의 나무에 어떻게 누적되는지를 알 수 있습니다. 행 전체를 읽으면 가장 오른쪽이 아닌 NA값이 위에서 OOB 예측에 표시 한 값입니다. 이것이 OOB 성능을 추적하는 방법입니다. NMS에 누적 누적 된 OOB 예측을 기반으로 OOB 샘플에 대해 RMSEP를 계산할 수 있습니다.

표시된 R 코드는 R의 randomForest 패키지 에있는 randomForest 코드의 내부에서 가져 오지 않습니다 . 각 트리의 예측이 결정되면 진행중인 작업을 수행 할 수 있도록 간단한 코드를 작성했습니다.

각 트리는 부트 스트랩 샘플에서 빌드되고 임의의 포리스트에 많은 수의 트리가 있으므로 각 트레이닝 세트 관찰이 하나 이상의 트리에 대한 OOB 샘플에 있으므로 OOB 예측이 모두에 제공 될 수 있기 때문입니다. 훈련 데이터의 샘플.

일부 OOB 사례에 대한 데이터 누락과 같은 문제에 대해 언급했지만 이러한 문제는 단일 회귀 또는 분류 트리와도 관련이 있습니다. 또한 포리스트의 각 트리는 mtry임의로 선택된 변수 만 사용 합니다.


큰 대답 개빈! 글을 쓸 때 "To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node", 무엇이 무엇인지에 대한 간단한 설명 rules for the tree이 있습니까? 그리고 sample표본이 groups나무가 데이터를 나누는 관측치라는 것을 이해하면 행으로 올바르게 이해 합니까?
user1665355

@ user1665355 회귀 또는 분류 트리가 어떻게 작성되었는지 이해했다고 가정했습니다. RF의 트리는 다르지 않습니다 (규칙을 중지하는 경우 제외). 각 트리는 학습 데이터를 응답에 대해 유사한 "값"을 가진 샘플 그룹으로 나눕니다. 가장 잘 예측하고 (즉, "오류"를 최소화하는) 가변 및 분할 위치 (예 : pH> 4.5)는 트리에서 첫 번째 분할 또는 규칙을 형성합니다. 그런 다음이 분할의 각 분기가 차례로 고려되고 트리의 "오류"를 최소화하는 새로운 분할 / 규칙이 식별됩니다. 이진 재귀 분할 알고리즘입니다. 분할이 규칙입니다.
복원 모니카

@ user1665355 예, 표본이 관측치 인 필드에서 왔으며 데이터 세트의 행입니다. 그러나 부트 스트랩 샘플에 대해 이야기하기 시작하면 훈련 데이터에서 대체 된 N 개의 관측치가 N 개의 행 또는 관측치입니다. 나중에 용어를 정리하려고합니다.
복원 모니카

감사! 나는 RF에 매우 익숙하기 때문에 어리석은 질문에 대해 유감스럽게 생각합니다 :) 나는 당신이 쓴 거의 모든 것을 아주 잘 이해한다고 생각합니다! 나무에서 첫 번째 분할 또는 규칙을 가장 잘 예측하는 (예 : "오류"최소화) 변수 및 분할 위치 (예 : pH> 4.5)에 대해 궁금합니다. 오류가 무엇인지 이해할 수 없습니다. : / 나는 읽고 이해하려고 노력하고있다 http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf. 115-116 페이지의 저자는 RF를 사용하여 variable importance기술 지표 를 선택합니다 .
user1665355

"오류"는 어떤 유형의 나무가 장착되어 있는지에 달려 있습니다. 편차는 연속 (가우시안) 응답에 대한 일반적인 측정 값입니다. rpart 패키지에서 Gini 계수는 범주 형 응답의 기본값이지만 다른 모델 등에 대한 기타도 있습니다. 성공적으로 배포하려면 Trees 및 RF에 대한 유용한 책을 사용해야합니다. 변수 불확실성 측정 값은 서로 다릅니다. 즉, 변수가 나무에 적합 할 때와 변수를 사용하지 않을 때 변경되는 양을 확인하여 데이터 세트에서 각 변수의 "중요도"를 측정합니다.
복원 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.