[머신러닝] Random Forests

Colacan·2022년 3월 3일
1

[머신러닝]

목록 보기
3/8

랜덤포레스트

  • 결정트리의 경우 한개만 생성하기에 상부에서 생성하는 에러가 하부까지 영향을 줌, 트리의 깊이에 따라 과적합도 일어남

  • 위의 문제는 트리의 앙상블을 통해 해결가능

  • 랜덤포레스트는 RandomForestClassifier를 통해 구현 가능

  • n_jobs옵션을 -1로 두면 현재 컴퓨터에서 가용가능한 모든 프로세스를 사용

앙상블

  • 여러개의 모델들을 만들어서 예측

  • 학습하는 여러개의 모델을 weak base learner (기본모델) 이라고 함

  • 모델의 다수결이나 평균을 통해 하나의 결과를 냄

  • 랜덤포레스트는 결정트리를 기본모델로두는 앙상블 모델

  • 결정트리들은 독립적으로 만들어진다.

  • 각각의 모델이 랜덤으로 예측하는 것보다 성능이 좋으면 랜덤포레스트는 결정트리보다는 성능이 좋다

배깅

  • 랜덤포레스트의 기본모델을 부트스트랩 sample로 만들어진다.

  • 부트스트랩에서 만들어진 sample로 모델학습을 하고 합치는 과정

  • 부트스트랩 샘플링
    1) 기존 데이터셋에서 원본데이터의 개수만큼 복원추출을 진행함
    2) training set에서 뽑히지않은 것들로 test set을 만든다. 이 test set을 oob set라고 말한다.
    3) 데이터가 충분히 크다고 가정했을 때 한 부트스트랩세트는 표본의 63.2%에 해당하는 샘플을 가진다. 여기서 추출되지 않는 36.8%의 샘플이 out-of-bag 샘플이 되고 이를 사용해서 모델을 검증할 수 있다.
    4) 따라서 따로 검증세트를 구성하지 않고 oobscore를 통해서 검증가능하다.

기본모델

  • 부트스트랩세트로 만들어진 모델을 합치는 과정을 aggregation이라고 한다.

  • 회귀 문제 : 기본모델 결과들의 평균으로 결과를 낸다

  • 분류 문제 : 다수결로 가장 많은 모델들이 선택한 범주로 예측한다.

  • 랜덤포레스트는 기본모델들의 트리를 만들 때 무작위로 선택한 특성세트를 사용한다.

  • 기본모델 트리를 만드는 것은 일반 결정트리 알고리즘과 다른 부분이 있다.
    1) 결정트리에서는 분할 위한 특성선택시 모든 특성 고려
    2) 랜덤포레스트는 특성n개 중 일부분 k개의 특성을 선택, k개에서 최적의 특성을 찾아내어 분할.
    3) k는 일반적으로 log2_n을 사용한다.

  • max_depth를 통해서 트리의 깊이, n_estimators를 통해서 기본모델의 수를 정할 수 있다.

순서형 인코딩

  • 트리기반 모델에서 범주형 자료를 모델에서 사용하고자할때 원핫인코딩보다 순서형 인코딩이 좋다.

  • 원핫인코딩의 경우 범주의 개수대로 특성들이 생성된다. 이 경우 트리에서는 범주형 특성이 상위노드에 선택될 기회가 적어진다.

  • 순서형 인코딩의 경우 순서적인 정보 인코딩, 트리모델에서는 순서정보가 상관없기에 괜찮다.

  • category_mapping을 통해 인코딩된 데이터의 매핑정보를 볼 수 있다.

  • %%time을 통해서 실행시간 체크 가능

  • H1N1 데이터셋에서 원핫인코딩의 경우보다 두배정도 빨라졌다.

  • 순서형 인코딩은 특성의 수가 변하지 않는다.

  • 인코딩 방법이 선형모델에 주는 영향
    1) 범주형에 순서형 인코딩을 사용시 무작위로 순서를 매핑한다.
    2) 의미를 잘 살리지 못하므로 선형모델에서는 정확도가 떨어진다.

랜덤포레스트 특성 중요도 비교

  • 지니불순도가 가장 많이 감소하는 특징이 중요하다.

  • 노드가 중요할수록 불순도가 크게 감소한다.

  • 노드는 한 특성의 값을 기준으로 분리되기에 불순도가 크게감소하는데 많이 사용된 특성이 중요도가 올라간다.

트리 앙상블 모델과 과적합

  • 랜덤포레스트는 랜덤성으로 과적합을 피한다.
    1) 기본모델을 만들 때 랜덤으로 sample을 선택하는 bagging
    2) 각 트리의 특성을 랜덤을 선택

랜덤포레스트 알고리즘

  • 의사코드를 통해 간단하게 과정을 알 수 있다.
  • 트리개수만큼 반복
  • 각 트리마다 부트스트랩 샘플을 통해서 학습
  • 학습과정
    1) 각 트리마다 특성의 셋을 선택한 후 분기들을 만들어서 트리를 만듬
    2) 만들어진 트리를 전체 트리에 합침

오늘의 참고자료

1) (예측모델 성능 비교 논문) Data-driven advice for applying machine learning to bioinformatics problems
https://arxiv.org/abs/1708.05070
2) MACHINE LEARNING LECTURE 8: ENSEMBLE METHODS
https://vdocuments.mx/machine-learning-lecture-8-ensemble-methods.html
3) Random Ferests Algorithm
http://pages.cs.wisc.edu/~matthewb/pages/notes/pdf/ensembles/RandomForests.pdf
4) Testing Variable Importance in Random Forests
https://eeecon.uibk.ac.at/~zeileis/papers/Lifestat-2008.pdf
5) One-Hot Encoding is making your Tree-Based Ensembles worse, here’s why?
https://towardsdatascience.com/one-hot-encoding-is-making-your-tree-based-ensembles-worse-heres-why-d64b282b5769

profile
For DE, DA / There is no royal road to learning

0개의 댓글