Random Forest

Minjung·2023년 7월 16일
0
post-thumbnail

Random Forest

‼️ Random Forest를 알아가기 전에

<의사 결정 트리>

  • 어떤 정보(데이터)가 주어졌을 때, 그 정보에 대한 질문을 통해 논리적으로 분류할 수 있는 것

  • 훈련을 통해 구성해놓은 다수의 나무들로부터 분류 결과를 취합해서 결론을 얻는 지도 머신러닝 알고리즘(앙상블 머신러닝 모델)
  • 정확성, 단순성 및 유연성으로 인해 가장 많이 사용되는 알고리즘
  • 분류 및 회귀 작업에 사용
  • 비선형 특성과 결합하면 다양한 데이터 상황에 유용
  • 의사결정트리의 일종, 그러나 더 많은 수의 그룹과 결정으로 단독 의사결정트리보다 더 정확한 결과를 보장함
의사결정트리랜덤포레스트
의사결정에 사용하는 규칙 존재기능을 무작위로 선택하고 평균화

단독 의사결정 트리보다 랜덤포레스트가 더 정확한 이유

→ 랜덤으로 선택된 무작위의 트리들이 과적합과 개별 오류로부터 서로를 보호하기 때문

랜덤 포레스트가 제대로 작동하기 위한 세가지 조건

  1. 모델이 추측만 하지 않도록 신호가 식별 가능해야만 함
  2. 트리로 만든 예측은 다른 트리들과 상관 관계가 작아야함
  3. 어느 정도 예측력이 있는 기능에 대해 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 속성으로 사용 가능

랜덤 포레스트의 장점

  1. 분류와 회귀 문제 모두에게 사용 가능
  2. 결측치를 다루기 쉬움
  3. 대용량 데이터 처리 용이
  4. 과적합 문제 해결
  5. 특성 중요도를 구할 수 있음

참조
https://www.tibco.com/ko/reference-center/what-is-a-random-forest

https://hleecaster.com/ml-random-forest-concept/

https://aytekin.tistory.com/47

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기