Python/Deep Learning

[Python DL]랜덤포레스트(Random Forest)_Classifier, Regressor

sohyunkimmm 2023. 1. 25. 14:30
728x90

* Decision Tree 포스팅

https://soso-bigdatamarketing.tistory.com/21

 

[Python ML]K-최근접이웃(K-NN), 의사결정나무(Decision Tree)

* K-최근접 이웃(K-NN; K-Nearest Neighbor) - 가장 근접하게 있는 데이터 종류에 따라서 해당 데이터의 종류를 정해주는 알고리즘 (유유상종) - 판별하고 싶은 데이터와 인접한 k개의 데이터를 찾아, 해

soso-bigdatamarketing.tistory.com

 

* 랜덤 포레스트

RandomForest (출처: https://www.kaggle.com/getting-started/176257)

- 앙상블에서 대표적인 배깅 방식

- 수많은 의사결정 나무(Decision Tree)가 모여서 생성

- 전체 feature 중 랜덤으로 일부 feature만 선택해 하나의 결정 트리를 만들고, 또 전체 feature 중 랜덤으로 일부 feature을 선택해 또 다른 결정 트리를 만들며, 여러개의 의사 결정 트리를 만드는 방식으로 구성

- 여러 결정 트리들이 내린 예측 값들 중, 가장 많이 나온 값을 최종 예측값으로 정함

- 'Random'? 각각의 의사 결정 나무를 만드는데 있어 쓰이는 특징들을 무작위로 선정

 

 

<장점>

1) 결측치를 다루기 쉽다

2) 대용량 데이터 처리에 효과적이다

3) 과적합(Overfitting) 문제를 회피하여, 모델의 정확도 향상시킨다

4) Classification 모델에서 상대적으로 중요한 변수를 선정 및 Ranking이 가능하다

5) 특성의 중요도(feature importance)를 측정하기 쉽다

 

Decision Tree vs. Random Forest

 

 

Q) 랜덤 포레스트가 의사결정 나무 모델에 비해 상대적으로 과적합을 피할 수 있는 이유?

- 랜덤 포레스트는 앙상블 모델로 여러개의 결정트리를 만들어 회귀라면 평균으로 결과를 예측하기 때문에 특정 모델은 과적합 되어있고, 특정 모델은 과적합이 안되어 있다. 

- 이러한 많은 모델을 결합(배깅)하여 평균내기 때문에 기존 의사결정 나무에 비해 상대적으로 과적합을 피할 수 있게 된다. 

- 또한, 의사결정 나무의 경우 모든 속성을 고려하지만 랜덤 포레스트는 일부의 속성만으로 랜덤으로 선택하여 학습 모델들을 만들기 때문에 상대적으로 과적합이 될 확률이 낮다. 

 

출처:&nbsp;https://value-error.tistory.com/31

 

 

 

* RandomForest 코딩하기

1) 분류 예측_RandomForestClassifier

변수선택, 데이터 분할, 데이터 전처리(StandardScaler_연속형, OneHotEncoder_분류형), 오버샘플링(SMOTE)

 

- 모형생성

model = RandomForestClassifier(random_state = 0, n_estimators = 300, max_depth = 3)

➡️ 깊이가 3인 decision tree 모형을 300개 만든다

 

- 파라미터

n_estimators: 랜덤 포레스트 안의 결정 트리 갯수 (default = 10)

max_depth: 트리의 깊이

max_features: 무작위로 선택할 feature의 갯수 (default: bootstrap = True)

accuracy = 0.947, f1-score = 0.94

 

 

* (참고) GridSearchCV를 통한 RandomForestClassifier의 하이퍼 파라미터 튜닝

 

출처:&nbsp; https://wooono.tistory.com/115

 

 

2) 회귀 예측_RandomForestRegressor

변수선택, 데이터 분할, 데이터 전처리(StandardScaler, OneHotEncoder)

 

- 모형 생성

model = RandomForestRegressor(random_state = 0, n_estimators = 100, max_depth = 4)

accuracy = 0.685, RMSE = 0.44

 

 

 

728x90
반응형