랜덤포레스트에 대한 내용을 정리해봤다.


랜덤포래스트는 의사결정나무만을 사용한다면 과적합(OverFit)이 일어날 확률이 높기 때문에 이를 해결하기 위해 랜덤하게 여러 개의 트리를 만드는 방법이다. 데이터가 들어왔을 때 랜덤포레스트 방법으로 만들어진 여러 개의 트리가 각각 어떤 결과를 내는지 보고 각 트리별 결과를 취합하여 결과를 예측하는 방법을 뜻한다.

*장단점
장점: 단일 트리의 약점을 보완하고 장점은 그대로 유지한 알고리즘이다.
단점: random_state 매개변수를 고정(지정)해야만 동일한 결과를 얻을 수 있다. 텍스트 데이터와 같은 매우 차원이 높고 희소한 데이터에는 잘 작동하지 않는다.

*중요 매개변수
n_estimators: 랜덤포레스트로 만들 트리의ㅠ갯수를 지정한다.
max_features: 각 트리별로 몇 개의 컬럼을 선택할 것인가, 각 트리의 랜덤성 결정, 클수록 과적합을 줄인다.
max_depth: 최대 깊이를 지정한다.
max_leaf_nodes: 최대 잎의 갯수를 지정한다.

*max_features에 대한 설명
1. max_features값이 큰 경우
- 모든 특성을 고려하므로 특성 선택에 무작위성이 들어가지 않는다. 하지만 부트스트랩 샘플링으로 인한 무작위성은 그대로 유지된다. 따라서 각 트리들이 비슷해지고 가장 두드러진 특성을 이용해 데이터를 맞출 것이다.
2. max_featurea값이 작은 경우
- 트리의 분기에서 선택되는 특성이 적어지게 된다. 1로 설정할 경우 테스트할 특성을 고를 필요가 없게 되며 그냥 무작위로 선택된 특성의 임계값만을 찾는다. 따라서 각 트리들이 많이 달라지고 각 트리를 데이터에 맞추기 위해서 깊이가 깊어지게 된다.

분류(classification)를 할 때,
max_features = sqrt(n_features)

회귀(regression)를 할 때,
max_features = n_features


*추가
max_features나 max_leaf_nodes 매개변수를 추가하면 성능이 향상되기도 한다. 또한 훈련과 예측에 필요한 메모리와 시간을 많이 줄일 수도 있다.
n_jobs = -1로 하면 모든 CPU 코어를 사용한다.

ref.
텐서플로우 블로그
https://tensorflow.blog/파이썬-머신러닝/2-3-6-결정-트리의-앙상블/

+ Recent posts