본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 랜덤포레스트(Random Forest, RF)(1) + 하루끝(20240126)

728x90
반응형

- 대표적인 트리기반 모델

- 앙상블 모형(동일한, 혹은 서로 다른 모형을 결합하여 최종 결론을 내는 방식)

- 모델링 목적: 서로 다른 트리를 구성하는 것

  1) 부트스트랩(bootstrap): 학습 데이터와 동일한 크기의 복원추출을 허용한 데이터셋을 각 트리마다 복습
                                            (서로 다른 트리를 구성하기 위한 모델 내부에서 선택한 기법 중 하나)

  2) 임의성 정도(max_features): 각 분류 기준을 만들 때 모든 설명변수를 고려하지 않고 랜덤하게 선택된 일부 변수 중에서 중요한 변수로 결정

                                                   (복원추출을 허용하여 가져와도 비슷한 데이터셋이 추출될 가능성이 높은데 이런 것들을 서로 다르게 표현하기 위하여 임의성 정도에 대한 알고리즘이 필요함. 랜덤하게 선택된 일부 변수 중 하나를 고려)

in R) mtry

3) 배깅(bootstrap + aggregation): 부트스트랩에 의해 생성된 데이터셋을 각 트리에 학습시킨 후, 각 트리의 결과를 결합하여 최종 결론을 내는 과정. (결론을 종합적으로 모아서 최종 결론을 내겠다는 의미)

 

 

예제) iris

iris 데이터의 붖꽃의 품종 분류(RF)

 

 

1. iris 데이터를 불러와서 x, y로 각각 분류한다.

 

 

 

 

2. 전처리가 되었다는 가정 하에 train / test 데이터로 split 한다.

 

 

 

3. 모델링을 수행한다.

 

 

 

 

4. 평가

 

 

이런 순서로 모델링을 진행하면 되겠다.

 

 

 

 

예제) cancer 데이터에서의 종양의 양성/악성 분류

 

1. 데이터 로딩

 

 

 

2. train / test data split

 

 

 

 

3. modeling

 

 

 

 

4. max_features 튜닝

여기서는 설명변수가 30개이기 때문에 최대 30개까지 고려하였다.

max_features가 1일 때 모델은 매번 달라질 뿐만 아니라 예측력이 가장 저하가 된다. 

이는 매번 스플릿 할 때마다 변수들을 하나씩 고정하게 되는데, 이 때 쓸모없는 변수들도 선택 될 가능성이 높기 때문이다.

max_features가 극단적으로 높은 경우(30)는 서로 완전히 같은 모델이 만들어지므로 비슷한 트리들이 구성될 가능성이 높아서 여러 모델을 만들 효과가 없다. 즉 임의성정도는 너무 작아도, 너무 커도 문제이다. 모델들마다 적정 수준의 임의성 정도를 갖는데, 설명변수에 스퀘어 루트를 씌우거나 변수의 개수 중 절반 정도 등 모델들마다 default 값의 임의성 정도를 각각 가지고 있다.

 

 

5. score_tr, score_te를 비교 시각화 해보자

 

 

 

5. 최종 결론

cancer 'Benign'에 대한 확률값

df_result = DataFrame(m_rf.predict_proba(cancer_x)[:,0], columns = ['y_prob'], index = cancer.index)

728x90
반응형