티스토리 뷰

반응형

랜덤포레스트는 훈련 데이터를 랜덤하게 샘플링한 모델 n개를 각각 훈련하여 결과를 평균하는 방법

 

여기도 결은 똑같고, 하이퍼 파라미터 최적화부터 들어간다.

from sklearn.ensemble import RandomForestRegressor

# 모델 생성
randomforest_model = RandomForestRegressor()
# 그리드서치 객체 생성
rf_params = {'random_state':[42], 'n_estimators':[100, 120, 140]} # ①
gridsearch_random_forest_model = GridSearchCV(estimator=randomforest_model,
                                              param_grid=rf_params,
                                              scoring=rmsle_scorer,
                                              cv=5)
# 그리드서치 수행
log_y = np.log(y)
gridsearch_random_forest_model.fit(X_train, log_y)
print('최적 하이퍼파라미터 :', gridsearch_random_forest_model.best_params_)
최적 하이퍼파라미터 : {'n_estimators': 140, 'random_state': 42}

 

그리드 서치를 사용할 때 랜덤 포레스트 회귀 모델의 파라미터는 random_state와 n_estimators.

random_state는 랜덤 시드값으로, 값을 명시하면 코드를 다시 실행해도 같은 결과

n_estimators는 랜덤 포레스트를 구성하는 결정 트리 개수

 

모델 성능 검증

# 예측
preds = gridsearch_random_forest_model.best_estimator_.predict(X_train)

# 평가
print(f'랜덤 포레스트 회귀 RMSLE 값 : {rmsle(log_y, preds, True):.4f}')

랜덤 포레스트 회귀 RMSLE 값: 0.1126

 

훈련 데이터 타깃값과 테스트 데이터 타깃 예측값의 분포 비교

import seaborn as sns
import matplotlib.pyplot as plt

randomforest_preds = gridsearch_random_forest_model.best_estimator_.predict(X_test)
#테스트 데이타를 넣은 예측값

figure, axes = plt.subplots(ncols=2)
figure.set_size_inches(10, 4)

sns.histplot(y, bins=50, ax=axes[0])
axes[0].set_title('Train Data Distribution')
sns.histplot(np.exp(randomforest_preds), bins=50, ax=axes[1])
axes[1].set_title('Predicted Test Data Distribution');

 

랜덤 포레스트로 예측한 결과를 파일로 저장하고, 커밋 후 제출

submission['count'] = np.exp(randomforest_preds) # 지수변환
submission.to_csv('submission.csv', index=False)

 

플레이그라운드 대회라 메달이 수여되지는 않는다.

 

간단한 피처 엔지니어링과 기본 모델로도 꽤 높은 등수를 기록할 수 있다.

 

7장 부터는 다들 책을 사서 보자! 인터넷에 나와 있는 건 없다.

밀리의 서재에도 있으니 추천한다.

 

https://wikidocs.net/book/13313

반응형