EDA
Decision Tree Data 사용
1 |
|
Random Forests
1 |
|
랜덤포레스트는 앙상블(Ensemble) 방법
- 앙상블 : 한 종류의 데이터로 여러 머신러닝 학습모델(Week base learner, 작은 여러개의 모델, 기본모델)을 만들어 그 모델들의 예측결과를 다수결이나 평균을 내어 예측하는 방법(이론적으로 기본모델 몇가지 조건을 충족하는 여러 종류의 모델을 사용할 수 있다.)
- 랜덤포레스트는 결정트리를 기본모델로 사용하는 앙상블 방법이다.
- 결정트리들은 독립적으로 만들어지며 각각 랜덤으로 예측하는 성능보다 좋을 경우 랜덤포레스트는 결정트리보다 성능이 좋다.
How make 랜포’s 기본모델
- 각각의 부트스트랩이라는 샘플을 통해 학습이 되는데 이렇게 모델링을 하고 합치는 과정을 배깅(Bagging, Bootstrap Aggregating)이라고 한다.
Bootstrap Sampling
- 앙상블에 사용하는 작은 모델들은 부트스트래핑(Bootstraping)이라는 샘플링 과정으로 얻은 부트스트랩세트를 사용해 학습한다.
- 원본 데이터에서 샘플링을 할 때 복원추출을 한다는 것인데, 복원추출은 샘플을 뽑아 값을 기록하고 제자리에 돌려놓는 것을 말한다.
- 샘플링을 특정한 수만큼 반복하면 하나의 부트스트렙 세트가 완성된다.
- 복원추출이기 때문에 부트스트랩세트에는 같은 샘플이 반복될 수 있다.
- Training Set에서 뽑히지 않은 샘플들이 Test Set에 있는데 이 Test Set을 기본모델을 검증할 때 사용하고 이 세트를 OB Set이라 한다.
- 부트스트랩세트의 크기가 n이라 할 때 한 번의 추출과정에서 어떤 한 샘플이 추출 되지 않을 확률
- n회 복원추출을 진행했을 때 그 샘플이 추출되지 않았을 확률
- n을 무한히 크게 했을 때 이 식
- 참고
- 즉 데이터가 충분히 크다고 가정했을 때 한 부트스트랩세트는 표본의 63.2% 에 해당하는 샘플을 가진다.
- 여기서 추출되지 않은 36.8%의 샘플이 Out Of Bag 샘플이며 이것을 사용해 모델을 검증할 수 있다.
1 |
|
Aggregation
- Aggregation : 부트스트랩세트로 만들어진 기본모델(Weak learner, 작은 모델들)들을 합치는 과정
- 회귀문제 : 기본모델 결과들의 평균
- 분류문제 : 다수결로 가장 많은 모델들이 선택한 범주
Random Select
- 랜덤포레스트는 기본모델들의 트리를 만들 때 무작위로 선택한 특성세트를 사용한다.
- 기본모델 트리를 만들 때 일반 결정트리 알고리즘과 다른점
- 회귀문제일 경우 기본모델 결과들의 평균으로 결과를 낸다.
- 분류문제일 경우 다수결로 가장 많은 모델들이 선택한 범주로 예측한다.
순서형(Ordinal) 인코딩
- 순서형 인코딩은 범주에 숫자를 mapping한다.
- [a, b, c] 세 범주가 있다면 이것을 [1, 2, 3] 이렇게 숫자로 인코딩한다.
- 트리구조 학습에서 원핫인코딩을 사용하면 문제가 있다.
- 트리구조에서는 중요한 특성이 상위 노드에서 먼저 분할이 일어난다.
- 범주 종류가 많은(high cardinality) 특성은 원핫인코딩으로 인해 상위노드에서 선택될 기회가 적어진다.
- 원핫인코딩 영향을 안 받는 수치형 특성이 상위노드를 차지할 기회가 높아지고 전체적인 성능 저하가 생길 수 있다.
- 트리모델에서는 순서정보가 상관없어서 순서형을 사용해도 괜찮다.
- 만약 Feature가 30개라면 가치가 30개로 분산되어서 설명력이 적어진다.
Mapping 확인
1 |
|
1 |
|
H1N1 Data에서 확인
- 실행속도 변화 비교
1 |
|
Random Forests 특성 중요도 비교
- 랜덤포레스트에서는 학습 후의 특성들의 중요도 정보(Gini importance)를 기본으로 제공한다.
- 중요도는 노드들의 지니불순도(Gini impurity)를 가지고 계산한다.
- 노드가 중요할수록 불순도가 크게 감소한다.
- 노드는 한 특성의 값을 기준으로 분리되기 때문에 불순도를 크게 감소하는데 많이 사용된 특성이 중요도가 올라갈 것이다.
1 |
|
- 이 두가지 인코딩 방법이 선형 모델에 어떤 영향을 줄까?
1 |
|
- 순서형인코딩에서 주의해야 할 점은 범주들을 순서가 있는 숫자형으로 바꾸면 원래 그 범주에 없던 순서정보가 생긴다.
- 순서형인코딩은 범주들 간의 분명한 순위가 있을 때 그 연관성에 맞게 숫자를 정해주는 것이 좋다.
- 오디널인코더로 무작위로 수치를 인코딩했지만, 정확한 범주의 순위를 알고 있다면
mapping
파라미터를 이용해 지정해줄 수 있다.
RF모델이 DT모델모다 상대적으로 과적합을 피할 수 있는 이유
- 랜덤포레스트의 랜덤성은 두가지에서 나온다.
- 랜덤포레스트에서 학습되는 트리들은 배깅을 통해 만들어진다.(
bootstrap = true
)이때 각 기본트리에 사용되는 데이터가 랜덤으로 선택된다. - 각각 트리는 무작위로 선택된 특성들을 가지고 분기를 수행한다.(
max_features = auto
)
- 랜덤포레스트에서 학습되는 트리들은 배깅을 통해 만들어진다.(
- 결정트리는 데이터 일부에 과적합하는 경향이 있다.
그래서 다르게 샘플링된 데이터로 과적합된 트리를 많이 만들고 그 결과를 평균 내 사용하는 모델이 랜덤포레스트이다. - 이렇게 하면 과적합이 줄고 성능이 유지된다.
비선형 관계의 데이터를 적합하는 모습
1 |
|
랜덤포레스트 알고리즘
- 랜덤포레스트의 의사코드(Pseudo code)