본문 바로가기
Programing/R

[R] 랜덤 포리스트

by 구루미94 2021. 12. 2.

1. 랜덤 포리스트

랜덤 포리스트: 여러 개의 결정 트리를 결합하여 성능을 향상하는 앙상블 기법

(랜덤 포리스트는 포리스트에 나무가 많다는 데 착안하여 생긴 이름이다.

여러 개의 결정 트리를 만들 때 난수를 사용하기 때문에 랜덤이라는 단어가 붙어 있다.)

요소 분류기: 앙상블 기법에서의 각각의 분류기

약한 분류기: 성능이 그리 뛰어나지 않은 분류기

 

2. 랜덤 포리스트의 원리

- 앙상블 기법은 요소 분류기로 약한 분류기를 주로 사용한다.

- 때로는 일부러 기본 성능을 약간 넘는 아주 낮은 성능을 지닌 분류기를 만들기도 한다.

- 이때 요소 분류기가 서로 독립적일수록 결합 성능이 좋아지기 때문에 요소 분류기를 만들 때 난수를 사용하여 독립성을 확보한다.

- 결정 트리에서는 루트 노드의 질문을 만들 때 여러 후보 질문 중에서 최적의 질문을 선택하지만 랜덤 포리스트는 가장 좋은 K개의 후보 질문 중에서 랜덤하게 하나를 선택하여 루트 노드에 부여하고 이런 랜덤한 과정을 반복하여 결정 트리를 여러 개 만들어낸다.

- randomForest 함수를 수행할 때마다 조금씩 다른 랜덤 포리스트가 만들어지기 때문에 성능을 측정해보면 조금씩 다르다.

- 예측 단계에서 새로운 샘플이 입력되면 각각의 결정 트리에 입력하여 분류 결과를 얻는다.

- 분류 결과를 일종의 투표로 간주하여 표를 가장 많이 얻은 부류로 분류하는 투표 기법으로 결합한다.

- 결정 트리마다 미리 성능을 평가한 다음 성능에 따라 차등하여 가중치를 주는 가중 투표 기법을 사용하기도 한다.

 

3. iris 데이터에 randomForest 함수 적용하기

알 수 있는 것

- 500개의 결정 트리가 만들어졌다.

- 훈련 집합에 대해 예측을 수행한 결과를 혼동 행렬로 보여준다.

- 150개 샘플 중에 7개를 잘못 분류했으므로 오류율은 4.67%다.

 

참고) randomForest는 결정 트리를 만들 때 난수를 생성하기 때문에 실행할 때마다 조금씩 다른 랜덤 포리스트가 만들어진다. 같은 랜덤 포리스트를 원하면, 실행할 때마다 같은 난수열이 발생되도록 유사 난수를 사용해야한다.

유사 난수는 set.seed(1)을 미리 실행하면 된다. 이때 매개변수를 1로 했는데 다른 값을 사용해도 되지만 같은 난수 열을 원하면 같은 값을 유지해야한다.

 

plot(f)

- 가로축: 결정 트리의 개수

- 세로축: 랜덤 포리스트의 오류율

- 즉, 결정 트리의 개수를 1부터 시작하여 500까지 점점 증가시키며 랜덤 포리스트의 성능 추이를 보여준다.

- 빨간색, 파란색, 녹색은 각각 3개의 부류인 setosa, versicolor, virginica의 오류율이며 검은색은 이들의 평균 오류율이다.

 

varUsed(f)
varImpPlot(f)

- varUsed랜덤 포리스트에 있는 결정 트리가 설명 변수를 질문에 사용한 횟수를 알려준다.

- varImpPlot함수는 설명 변수의 중요도를 시각화한다.

 

treesize(f)

- treesize 함수는 결정 트리 각각에 대해 리프 노드의 개수를 출력한다.

 

4. 랜덤 포리스트로 예측하기

- 랜덤 포리스트에서는 결정 트리와 달리 predict 함수는 부류 정보만 출력된다.

- type = 'prob' 옵션을 설정하면 확률이 출력된다.

- 확률이 아닌 요소 분류기의 투표에 따른 득표수를 살펴보고자 하면 type = 'vote'와 norm.votes=FALSE 옵션을 설정하면 된다.

 

5. 랜덤 포리스트의 하이퍼 매개변수

 

- 하이퍼 매개변수: 모델의 구조나 학습 방법을 제어하는 데 사용하는 변수

- ntree 옵션: 결정 트리의 개수를 줄이거나 늘리고 싶을 때 사용하는 옵션

- nodesize 옵션: 리프 노드에 도달한 샘플의 최소 개수를 설정

ex. nodesize=6 으로 설정하면 결정 트리를 만드는 과정에서 어떤 노드를 분할했을 떄 6보다 작은 자식 노드가 생길 경우 그 노드를 더 이상 분할하지 않고 리프 노드로 결정한다.

따라서 nodesize를 크게 설정할 수록 작은 결정 트리가 만들어진다.

 

- maxnodes 옵션: 리프 노드의 최대 개수를 제한

728x90

댓글