본문 바로가기
[코드스테이츠]AI

[S2-Week2]Random Forests

by b___gly 2022. 5. 9.

Warm up

  • 결정 트리는 과적합이 되기 쉬워서 랜덤 포레스트와 같은 앙상블 기법을 사용함. 
  • 예를 들어, 30개의 feature가 있다면, 그 중 5개만 feature로 사용하는 결정 트리를 하나 만들고 또 5개씩 계속 만들고 예측값 중 가장 많이 나온 값을 최종 예측값으로 정함. 
  • 분류의 경우는 최빈값, 회귀일 경우는 평균값
  • n_estimators: 랜덤 포레스트 안의 결정 트리 갯수 / max_features: 무작위로 선택할 Feature의 개수
  • 앙상블기법에는 투표, 배깅, 부스팅이 있고, 그 중 랜덤포레스트는 배깅을 사용. 
  • Bagging : 하나의 데이터 세트를 가지고 여러 개의 훈련 세트를 만듬. 이 훈련 세트는 부트스트랩 방법에 의해 샘플이 추출되기 때문에 복원 추출이 허용된다.
  • 랜덤 포레스트 

(출처) https://heytech.tistory.com/145

 

Session

  • 랜덤포레스트는 결정트리를 기본모델로 사용하는 앙상블 방법
  • 결정트리들은 독립적으로 만들어지며 각각 랜덤으로 예측하는 성능보다 좋을 경우 랜덤포레스트는 결정트리보다 성능이 좋음.
  • 데이터가 충분히 크다면, 36.5%(Out-Of-Bag)는 한 번도 뽑히지 않음. -> 즉, 표본의 63.2%만 가지고 학습을 진행.
pipe.named_steps['randomforestclassifier'].oob_score_
  • 기본모델(weak learner, 작은 모델들) : 부트스트랩 세트로 만들어진 기본 모델들

  • Ordinal Encoding : ['a', 'b', 'c'] 세 범주가 있다면 이것을 -> [1, 2, 3] 이렇게 숫자로 인코딩 
    • 원핫 인코딩을 하면 범주 종류가 많은 feature는 상위노드에서 선택 될 가능성이 낮음 (실제로 그게 유의미한 feature 였다고 하더라도)
from category_encoders import OrdinalEncoder

enc = pipe_ord.named_steps['ordinalencoder']
encoded = enc.transform(X_train)
print('Ordinal shape: ', encoded.shape)
  • 특성 중요도 
rf_ord = pipe_ord.named_steps['randomforestclassifier']
importances_ord = pd.Series(rf_ord.feature_importances_, X_train.columns)

 

도움이 될만한 사이트

  • https://www.youtube.com/watch?v=YEt0ViG_VXk

 

 

소감

캐글......재밌긴 한데 EDA 넘나 어려운 것....

 

 

 

 

 

'[코드스테이츠]AI' 카테고리의 다른 글

[S2-Week3]Choose your ML problems  (0) 2022.05.13
[S2-Week2]Model Selection  (0) 2022.05.10
[S2-Week2]Decision Trees  (0) 2022.05.06
[AI 부트캠프]5주차 총 복습  (0) 2022.05.02
[S2-Week1]Logistic Regression  (0) 2022.05.02

댓글