[AI Bootcamp] N222 - Random Forests

HYUNG JIN·2021년 8월 22일
0

AI Bootcamp

목록 보기
15/17
post-thumbnail

Session Review

Random Forests

Decision Trees와 연관 -> 새로운 데이터를 분류하는데 한계가 있는 유연성 부분을 보완
=> Random Forests: decision trees 모델의 간단함과 더불어, 새로운 데이터에도 유연하게 적용할 수 있도록 함 = 결정트리를 기본모델로 하는 앙상블 모델
-> 앙상블: 오케스트라 같은 것 (다수의 모델을 사용)

진행과정

step 1) create a bootstrapped dataset (each sample can be in the bootstrapped dataset more than one: row 기준 복원추출)

step 2) create a decision tree (a random subset of variables at each step: 모든 특성을 선택하지 X -> 특성 n개 중 일부인 k개의 특성 선택!)
❗️ feature 선택하는 것은 decision tree 모델이기 때문에 진행하는 것 (bootstrapped sampling 때문인 것 아님)

step 3) repeat steps 1 and 2 many times!
-> 새로운 데이터가 들어왔을 때, 적용할 수 있는 다양한 decision trees 모델이 만들어짐

step 4) bootstrapped set로 만들어진 기본모델들을 aggregation 함으로써 예측

👀 How to do aggregation?

  • 회귀문제: 기본모델 결과들의 평균
  • 분류문제: 다수결
    새로운 데이터가 들어왔을 때, 첫번째 tree 부터 진행하며 결과를 기록 -> 모든 tree를 통해 가장 많은 모델들이 선택한 범주로 예측

Bagging

Bootstrapping the data + using the aggregate to make a decision = Bagging

  • 앞서 bootstrapped dataset에 original dataset의 데이터를 한 번 이상씩 넣을 수 있다고 했기 때문에, bootstrapped dataset에 들어가지 못한 데이터가 있을 수 있음 (보통 1/3 정도)
    = 이러한 데이터를 모아놓은 것이 "Out-Of-Bag Dataset"

  • Out-Of-Bag samples 중 random forests에 의해 제대로 분류되지 않은 것들 = "Out-Of-Bag Error"

❗️ out of bag dataset이 부스트스트랩 세트로 만들어진 모델의 검증 세트의 역할을 수행함
but, random forests 모델에서는 어차피 다른 모델과 마찬가지로 train/val/test로 나눠서 진행하기 때문에 따로 out-of-bag dataset이 중요하지 않음!

step 5) Out-Of-Bag Error를 통해 모델의 Accuracy 측정하고 이를 바탕으로 다시 step 2로 돌아가서 variables의 수 조정하여 다시 모델링 (optimizing the random forests) -> 가장 높은 정확도 가진 모델 선택

Ordinal Encoding

👀 트리구조 -> 원핫인코딩 사용하면 문제 발생 가능성 있음: high cardinality 가진 범주가 상위 노드로 갈 가능성이 줄어듦(그 중요도가 무시됨)
트리에서는 중요한 특성이 상위노드에서 먼저 분할되는데, 범주 종류가 많은(high cardinality) 특성의 경우 원핫인코딩을 진행하면 여러개의 특성으로 쪼개져서 제대로 된 역할을 수행할 수 없게 됨
-> 원핫인코딩의 영향을 받지 않는 수치형 특성이 상위노드를 차지할 기회 높아지고, 전체적인 성능저하 발생

=> 트리모델에서는 norminal 특성도 순서적인 특성을 반영하는 ordinal encoding을 사용하는 것이 효과적 어차피 순서 정보는 트리모델에서 큰 영향을 미치지 않기 때문
+) 변수의 개수만큼 특성이 증가하는 원핫인코딩과 달리 원래 특성 크기 그대로 반영되므로 중요한 순서대로 노드 분할이 가능해짐

👀 api 문서 첨부하기!

Food for Thought

Random Forests가 Decision Trees에 비해 상대적으로 과적합을 피할 수 있는 이유?

random forests의 'random'성
random forests는 random하게 샘플링된 데이터로 과적합된 트리를 많이 만들어서 그 결과를 종합하여 사용

❗️ 랜덤 포레스트 모델에서 트리를 random하게 만드는 방법
1) 랜덤 포레스트에서 학습되는 트리는 bagging을 통해 만들어지는데, 이 때 각 기본트리에 사용되는 데이터가 랜덤으로 선택됨
2) 각각의 트리들은 랜덤으로 선택된 특성들을 가지고 분기를 수행함

Bootstrapped sampling (bagging) vs. boosting

  • bagging: 전체 데이터에서 몇 개의 데이터셋(subset of data)을 보따리로 묶어서 weak learner 데이터셋을 만듦 (복원추출 -> 중복된 데이터 묶을 수 있음) => 의도적으로 약한 모델을 만드는 것이 목적!
  • boosting: 약한 것을 강하게 하는 것 -> 잘못 예측된 데이터의 weight을 더 크게 만들어서 다음 모델은 이 데이터를 좀 더 신경쓰도록 하도록 하는 것

Random Forests 활용

  • 랜덤 포레스트를 main model이 아니라 전처리 과정에서 feature importance를 계산하는데 사용: 어떤 feature가 information gain이 가장 큰 것인지 확인 (결과값이 중요한 것이 아니라, feature 별로 information gain 양을 상대적으로 비교하여 중요도 정렬)

F1 score

  • precision: TP / (TP + FP): 내가 positive라고 예측한 것들 중, 정말로 positive한 애들
  • recall: TP / (TP + FN): 실제로 positive한 애들 중에서 얼마나 옳게 예측이 된 것인지

business context:

1.암이 있는 환자를 없다고 잘못 판단 vs. 암이 없는 환자 있다고 잘못 판단: 전자(FN)가 더 중요함 -> recall을 통해 FN을 최소화하는 방향으로 진행

  1. 관심이 없는데 있다고 예측을 해서 우리 회사 돈을 쓴 경우 vs. 관심이 있는데 없다고 예측해서 우리 회사 돈을 쓰지는 않은 경우: 금전적 손실을 발생시키는 전자(FP)가 더 큰 문제 -> precision을 통해 FP를 최소화하는 방향으로 진행

최적의 hyperparameter 찾기

RandomizedSearchCV 를 통해 hyperparameter의 범위를 줄인 후에 GridSearchCV 실행하여 최적의 hyperparameter 찾기!

참고자료

profile
Always stay confident

0개의 댓글