Random Forest
‼️ Random Forest를 알아가기 전에
<의사 결정 트리>
- 어떤 정보(데이터)가 주어졌을 때, 그 정보에 대한 질문을 통해 논리적으로 분류할 수 있는 것
- 훈련을 통해 구성해놓은 다수의 나무들로부터 분류 결과를 취합해서 결론을 얻는 지도 머신러닝 알고리즘(앙상블 머신러닝 모델)
- 정확성, 단순성 및 유연성으로 인해 가장 많이 사용되는 알고리즘
- 분류 및 회귀 작업에 사용
- 비선형 특성과 결합하면 다양한 데이터 상황에 유용
- 의사결정트리의 일종, 그러나 더 많은 수의 그룹과 결정으로 단독 의사결정트리보다 더 정확한 결과를 보장함
의사결정트리 | 랜덤포레스트 |
---|
의사결정에 사용하는 규칙 존재 | 기능을 무작위로 선택하고 평균화 |
단독 의사결정 트리보다 랜덤포레스트가 더 정확한 이유
→ 랜덤으로 선택된 무작위의 트리들이 과적합과 개별 오류로부터 서로를 보호하기 때문
랜덤 포레스트가 제대로 작동하기 위한 세가지 조건
- 모델이 추측만 하지 않도록 신호가 식별 가능해야만 함
- 트리로 만든 예측은 다른 트리들과 상관 관계가 작아야함
- 어느 정도 예측력이 있는 기능에 대해 GI=GO여야 함
랜덤 포레스트에서 각 그룹을 어떻게 생성하는가?
- Bagging(Bootstrap Aggregating)
- n개의 데이터 셋에서 임의로 n/10개의 행(선택하는 행의 개수는 자유)을 선택하여 트리를 만든다.
- 중복을 허용해야한다.(=복원추출)
- Bagging Features
- 트리를 만들 때 사용될 features을 제한함으로써 각 트리에 다양성을 준다.
- 예를 들어 feature가 25개 있다면, 그 중 5개만 뽑아서 트리를 만든다. → 반복(또 5개를 뽑아서 트리를 만든다)
- 전체 features 개수의 제곱근만큼 선택하는 것이 일종의 규칙
- 이렇게 만든 각자 다른 트리들을 이용해 숲을 이룬다.
- 만들어진 트리들을 합치는 과정 = Aggregating
- 회귀 문제일 경우 기본 모델들의 결과들을 평균내어 사용
- 분류 문제일 경우 다수결로 투표하여 득표수가 가장 많은 것을 사용
Sklearn이 제공하는 Random Forest
주요 파라미터
n_estimators : 트리를 몇개 만들것인지(int, default=100)값이 클수록 오버피팅을 방지
criterion : gini 또는 entropy 중 선택(불순도 함수)
max_depth : 트리의 깊이(int, default=None)
bootstrap : True이면 전체 feature에서 복원추출하여 트리 생성(default=True)
max_features : 선택할 feature의 개수, 보통 default 값으로 사용(default=’auto’)
랜덤 포레스트 모델 평가하기
- Bagging을 할 때 복원 추출을 이용하기 때문에 훈련 데이터 셋에 포함되지 않는 데이터들을 Out-Of-Bag이라 하고 이 데이터들을 모델에 직접 대입하여 검증한다.
- sklearn에서 oobscore 속성으로 사용 가능
- 이 를 통해 하이퍼 파라미터를 튜닝하며 모델의 일반화 가능
<특성 중요도>
- 랜덤 포레스트에서의 중요한 장점인 특성 중요도를 통해 모델의 학습 후에 중요도 정보를 알 수 있음
- 노드들의 지니 불순도를 통해서 특성들의 중요도를 계산
- sklearn에서 featureimportance 속성으로 사용 가능
랜덤 포레스트의 장점
- 분류와 회귀 문제 모두에게 사용 가능
- 결측치를 다루기 쉬움
- 대용량 데이터 처리 용이
- 과적합 문제 해결
- 특성 중요도를 구할 수 있음
참조
https://www.tibco.com/ko/reference-center/what-is-a-random-forest
https://hleecaster.com/ml-random-forest-concept/
https://aytekin.tistory.com/47
저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!