Random Forest의 작동 방식을 이해하려고합니다. 나는 나무가 어떻게 만들어지는 지에 대해 이해하고 있지만 랜덤 포레스트가 가방 밖에서 어떻게 예측을하는지 이해할 수 없습니다. 누구든지 간단한 설명을 해 주시겠습니까? :)
Random Forest의 작동 방식을 이해하려고합니다. 나는 나무가 어떻게 만들어지는 지에 대해 이해하고 있지만 랜덤 포레스트가 가방 밖에서 어떻게 예측을하는지 이해할 수 없습니다. 누구든지 간단한 설명을 해 주시겠습니까? :)
답변:
포리스트의 각 트리는 훈련 데이터에있는 관측치의 부트 스트랩 샘플로 구축됩니다. 부트 스트랩 샘플의 관찰은 트리를 구축하는 반면 부트 스트랩 샘플에없는 관찰은 백 밖 (또는 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
임의로 선택된 변수 만 사용 합니다.
http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf
. 115-116 페이지의 저자는 RF를 사용하여 variable importance
기술 지표 를 선택합니다 .
"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
나무가 데이터를 나누는 관측치라는 것을 이해하면 행으로 올바르게 이해 합니까?