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?
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) -> 가장 높은 정확도 가진 모델 선택
👀 트리구조 -> 원핫인코딩 사용하면 문제 발생 가능성 있음: high cardinality 가진 범주가 상위 노드로 갈 가능성이 줄어듦(그 중요도가 무시됨)
트리에서는 중요한 특성이 상위노드에서 먼저 분할되는데, 범주 종류가 많은(high cardinality) 특성의 경우 원핫인코딩을 진행하면 여러개의 특성으로 쪼개져서 제대로 된 역할을 수행할 수 없게 됨
-> 원핫인코딩의 영향을 받지 않는 수치형 특성이 상위노드를 차지할 기회 높아지고, 전체적인 성능저하 발생
=> 트리모델에서는 norminal 특성도 순서적인 특성을 반영하는 ordinal encoding을 사용하는 것이 효과적 어차피 순서 정보는 트리모델에서 큰 영향을 미치지 않기 때문
+) 변수의 개수만큼 특성이 증가하는 원핫인코딩과 달리 원래 특성 크기 그대로 반영되므로 중요한 순서대로 노드 분할이 가능해짐
👀 api 문서 첨부하기!
random forests의 'random'성
random forests는 random하게 샘플링된 데이터로 과적합된 트리를 많이 만들어서 그 결과를 종합하여 사용
❗️ 랜덤 포레스트 모델에서 트리를 random하게 만드는 방법
1) 랜덤 포레스트에서 학습되는 트리는 bagging을 통해 만들어지는데, 이 때 각 기본트리에 사용되는 데이터가 랜덤으로 선택됨
2) 각각의 트리들은 랜덤으로 선택된 특성들을 가지고 분기를 수행함
business context:
1.암이 있는 환자를 없다고 잘못 판단 vs. 암이 없는 환자 있다고 잘못 판단: 전자(FN)가 더 중요함 -> recall을 통해 FN을 최소화하는 방향으로 진행
RandomizedSearchCV
를 통해 hyperparameter의 범위를 줄인 후에 GridSearchCV
실행하여 최적의 hyperparameter 찾기!