랜덤 포레스트, RandomForest
랜덤 포레스트(Random Forest): 결정 트리의 단점인 오버피팅 문제를 완화시켜 주는 발전된 형태의 트리 모델
- 랜덤으로 독립적인 트리를 여러 개 만들어서 예측
- 여러 모델을 활용하여 하나의 모델을 이루는 기법을 앙상블이라 함
장점 | 단점 |
결정 트리와 마찬가지로, 아웃라이어에 거의 영향을 받지 않음 | 학습 속도가 상대적으로 느림 |
선형/비선형 데이터에 상관없이 잘 작동함 | 수많은 트리를 동원하기 떄문에 모델에 대한 해석이 어려움 |
- 종속변수가 연속형 데이터와 범주형 데이터인 경우 모두 사용가능
- 아웃라이어가 문제가 되는 경우 선형 모델보다 좋은 대안이 될 수 있음
- 오버피팅 문제로 결정트리를 사용하기 어려울 때 사용 가능
코드
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(random_state=100)
model.fit(X_train, y_train)
pred = model.predict(X_test)
하이퍼파라미터
- n_estimator: 랜덤 포레스트를 구성하는 결정 트리의 개수(기본값=100)
- max_depth: 각 트리의 최대 깊이(숫자가 낮을수록 오버피팅을 피할 수 있으나, 언더피팅의 위험이 올라감)
- min_samples_split: 해당 노드를 나눌 것인지 말 것인지를 노드 데이터 수를 기준으로 판단(이 매개변수에 지정된 숫자보다 적은 수의 데이터가 노드에 있으면 더는 분류하지 않음, 기본값=2)
- n_jobs: 병렬 처리에 사용되는 CPU 코어 수(많은 코어를 사용할수록 속도는 상승하고 -1을 입력하면 모든 코어를 사용, 기본값=None)
모델 이해
랜덤 포레스트는 결정 트리의 집합체로 다양한 트리의 의견을 반영하기 때문에 오버피팅 위험을 낮출 수 있음
- 랜덤 포레스트가 트리를 만들 때는 데이터 전체를 사용하지 않고 매번 다른 일부의 데이터를 사용하여 다른 트리를 만들어냄
- 당연히 일부 데이터만 사용하면 전체 데이터를 사용한 결과보다 예측력이 떨어지지만, 예측력이 떨어지는 수많은 트리들이 함께 모여 중윗값을 찾아내면 오버피팅을 막는데 효율적임
랜덤 포레스트가 일부 데이터를 취하는 기준
- 데이터의 행 기준 - 매번 약 2/3에 해당하는 데이터만 사용
- 데이터의 열 기준 - 일부의 변수들만 매번 다르게 추출하여 사용
최종 예측값
- 각 트리의 예측값을 기반으로 만들어짐
- 회귀 문제: 연속형 변수를 예측하기 떄문에, 각 트리에서 만들어낸 예측값들의 평균값을 최종 예측값으로 사용
- 분류 문제: 각 트리에서 예측한 값들 중 최다 투푯값으로 예측값 결정
참고: 데싸노트의 실전에서 통하는 머신러닝
반응형