소란한 블로그
[TIL-210205] Random Forest 본문
1. 랜덤포레스트(Random Forest)
결정트리모델은 한 개의 트리만 사용하기 때문에 한 노드에서 오류가 발생하면 그 아래 노드에도 순차적으로 계속 영향을 준다는 단점이 있다. 또한 트리의 깊이가 깊어지면 과적합이 되는 경향이 있는데, 이런 문제들을 랜덤 포레스트 모델을 이용하여 해결할 수 있다.
랜덤포레스트는 앙상블(Ensemble) 방법이다. 앙상블은 한 종류의 데이터로 여러 머신러닝 학습모델(weak base leaner, 기본모델)을 만들고, 이 모델들의 예측결과의 평균을 계산하거나 다수결을 이용하여 예측하는 방법을 말한다. 랜덤포레스트는 결정트리를 기본모델로 하는 앙상블 방법이다.
1) Bootstrapped dataset
original dataset에서 original dataset과 같은 사이즈로 무작위로 샘플을 뽑은 데이터셋을 말한다. 여기서 중요한 점은 샘플을 뽑을 때 중복을 허락하는 것(복원추출)이다. 이렇게하면 같은 샘플이 여러번 들어갈 수 있다.
이렇게 만든 부트스트랩 데이터셋를 이용해 학습시킨 모델을 기본 모델(weak learner)라고 이 기본 모델들을 이용해서 앙상블 방법을 적용할 수 있다.
2) Out-Of-Bag Sample
부트스트랩 샘플링 과정에서 어떤 한 샘플이 추출되지 않을 확률이 존재한다. n회의 복원추출을 진행했을 때 확률은 아래와 같다.
이 때, n을 무한히 크게 한다면, 0.368 정도가 나온다.
데이터가 충분히 크다고 가정하면, 하나의 부트스트랩 세트는 표본의 63.2%에 해당하는 샘플을 가진다는 의미이다.
여기서 계산 추출되지 않은 36.8%의 샘플을 Out of Bag sample이라고 한다. 이 OOB sample을 test set으로 이용해 모델을 검증할 수 있다.
3) Bagging(Bootstrap Aggregating)
부트스트랩세트로 만들어진 기본모델들을 합치는 과정을 Aggregation이라고 하는데, Bootstrap Aggregating을 줄여서 Bagging이라고 한다.
> 회귀문제라면, 기본모델의 결과들의 평균
> 분류문제라면, 다수결로 가장 많은 모델들이 선택한
범주로 배깅(Bagging)이 이루어진다.
# 랜덤포레스트 모델
pipe = make_pipeline(
OrdinalEncoder(),
SimpleImputer(),
RandomForestClassifier(n_jobs=-1, random_state=10, oob_score=True,
max_depth = 10, n_estimators = 100)
)
pipe.fit(X_train, y_train)
2. 순서형 인코딩(Ordinal Encoding)
one hot encoding의 경우, 범주형 자료를 인코딩할 때, 우선순위는 고려하지 않는다. 이렇게 했을 경우, 트리구조 학습에서는 문제가 발생한다. 왜냐하면 범주의 종류가 많은, 높은 cardinality를 가지는 특성들은 원핫인코딩을 하면 cardinality만큼 특성(feature)가 쪼개지게 된다. 그렇게 되면 중요한 특성이 상위 노드에서 먼저 분할되는 트리구조에서는 그 특성이 실제로는 중요한 특성이더라도 상위 노드에서 선택될 기회가 줄어든다.
따라서 원핫인코딩의 영향을 받지 않는 수치형 특성이 상위 노드를 차지할 가능성이 높아지고, 이 것이 잘못된 선택일 경우 학습 모델의 성능이 저하될 수 있다.
이를 방지하기 위해서 순서형 인코딩을 사용할 수 있다.
만약 데이터로 설문조사 결과를 이용한다면, 각 항목에 대해 가중치가 있을 수 있다.
예를 들어 '사과를 얼만큼 좋아하나요?' 라는 설문 항목에
- 0: 전혀 좋아하지 않음
- 1: 주면 먹음
- 2: 조금 좋아함
- 3: 아주 사랑함
와 같이 범주별로 가중치가 있을 수 있다.
이런 경우를 고려하여 인코딩할 수 있어서 좀 더 정확한 학습이 가능하다.
3. 특성 중요도
** 이해 x
- 랜덤포레스트에서는 특성 n개 중 일부분 k개의 특성을 선택(sampling) 하고 이 k개에서 최적의 특성을 찾아내어 분할합니다. 이때 k개는 일반적으로 log2n 를 사용 => 무슨 의미?
'Today I Learned' 카테고리의 다른 글
[TIL-210406] 역전파(Backpropagation) (0) | 2021.04.06 |
---|---|
[TIL-210204] Decision Tree (0) | 2021.02.04 |
[TIL-210202] Logistic Regression (0) | 2021.02.02 |
[TIL-210201] Ridge Regression (0) | 2021.02.01 |