머신러닝

보루타(boruta algorithm)

cj92 2020. 8. 9. 23:26

보루타 알고리즘은 Random Forest를 기반으로 변수를 선택하는 방법이다.

 

보루타의 알고리즘 아이디어는 다음과 같다.

 

"기존 변수를 복원추출해서 만든 변수(shadow) 보다 모형 생성에 영향을 주지 못했다고 하면 이는 가치가 크지 않은 변수이다."

 

이를 좀 더 알고리즘적으로 말하자면

 

1. 기존변수와 기존변수를 복원추출해 만든 RandomForest 모형을 생성

2. 생성된 모형의 변수중요도를 기준으로 복원추출해 만든 변수들의 변수중요도 중 최대 값을 기준으로 기존변수와 비교

3. 비교 결과 최대 값 보다 큰 기존변수의 hit수를 1증가

4. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit-1보다 큰 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 accept로 변환

5. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit보다 작은 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 reject로 변환 

6. Tentative에 해당하는 변수가 하나도 없거나 run횟수가 maxrun을 넘을 때까지 위 알고리즘을 반복

- 본페로니 교정은 default이며 옵션으로 변경 가능, Max run의 default는 100, doTrace를 기준으로 정밀도 및 알고리즘이 조금씩 상이해짐.

아래는 R에 나오는 보루타 알고리즘의 예제이다.

3번째 변수는 12번째 시행에서 기각되었으며, 2번째 변수는 16번째, 최종적으로 V6가 기각되었음을 boruta.Ozone값과 ImpHistory를 통해 알 수 있다. 

 

library(Boruta)
data("Ozone")
ozone <- na.omit(Ozone)
summary(ozone)

set.seed(42)
Boruta.Ozone <- Boruta(V4 ~ ., data = ozone, ntree = 500,doTrace=0)
Boruta.Ozone$ImpHistory
plot(Boruta.Ozone)