랜덤포레스트에 대한 내용을 정리해봤다.
랜덤포래스트는 의사결정나무만을 사용한다면 과적합(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-결정-트리의-앙상블/
랜덤포래스트는 의사결정나무만을 사용한다면 과적합(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-결정-트리의-앙상블/
'데이터 분석 > 데이터 분석 기초 자료' 카테고리의 다른 글
[TensorFlow] Batch를 만들어서 MNIST 데이터를 학습시키고 test 데이터에 적용해보기 (0) | 2018.07.26 |
---|---|
[TensorFlow] TensorFlow 기초 (0) | 2018.07.23 |
[데이터 수집] 파이썬으로 API를 이용하여 JSON 형태의 영화 데이터 수집하기 (0) | 2018.07.04 |
[Python Scraping] HTML에 존재하는 전체 데이터를 재귀적으로 가져오기 (0) | 2018.07.03 |
[Tensorflow] AVX 미지원으로 인한 "DLL 초기화 루틴을 실행할 수 없습니다." 에러 해결방법 (1) | 2018.06.29 |