언어/파이썬

머신러닝with파이썬6강(3)_랜덤포레스트&XGBoost, 하이퍼파라미터 튜닝

디지털랫드 2024. 3. 15. 12:22

랜덤포레스트 & XGBoost


이전 시간에 지도학습(분류) 중 랜덤포레스트 & XGBoost를 다뤄봤는데요.
분류뿐만 아니라 회귀에서도 자주 활용됩니다. 이제 실습을 함께 진행해 보도록 하겠습니다.

이번 시간 정리


[리마인드] 랜덤포레스트 VS XGBoost

1. 랜덤포레스트

  • 여러 개의 의사결정 트리로 구성
  • 앙상블 방법 중 배깅(bagging) 방식
  • 부트스트랩 샘플링 (데이터셋 중복 허용)
  • 최종 다수결 투표

2. XGBoost

  • 트리 앙상블 중 성능이 좋은 알고리즘
  • eXtreme Gradient Boosting을 줄여서 XGBoost라고 한다.
    약한 학습기가 계속해서 업데이트를 하며 좋은 모델을 만들어 간다.

1) 랜덤포레스트


 
실행 완료
[21]:
3187.227070786517

2) XGBoost

 
실행 완료
/opt/conda/lib/python3.9/site-packages/pkg_resources/__init__.py:122: PkgResourcesDeprecationWarning: 0.996-ko-0.9.2 is an invalid version and will not be supported in a future release
  warnings.warn(
[20]:
4028.2455020344587

 

하이퍼파라미터 튜닝


이번 시간에는 하이퍼파라미터 튜닝을 살펴봅시다.
그리드 서치와 랜덤 서치를 활용해서 파라미터 값을 찾는 방법을 알려드리도록 하겠습니다.

이번 시간 정리


모델의 성능 향상을 위해 하이퍼파라미터 튜닝을 진행하며 사이킷런의 model_selection에서 제공하는 GridSearchCV와 RandomizedSearchCV를 이용하여 최적화할 수 있습니다.

1. GridSearchCV

  • grid search를 통해 최적의 하이퍼파라미터를 찾음 (시간 오래 걸림)

2. RandomizedSearchCV

  • RandomizedSearchCV 는 GridSearchCV와 달리 랜덤으로 N개의 조합만 탐색함
    (시간 내 최적의 하이퍼파라미터 탐색)

 

1) 데이터셋 로드

 
실행 완료
 

2) GridSearchCV

grid search를 통해 최적의 하이퍼파라미터를 찾음 (시간 오래 걸림)

 
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/1165313657.py in <module>
      2 #  'max_depth':[3, 5, 7],  'n_estimators':[100, 200]만 적용 시 3분 내외
      3 xgb = XGBRegressor()
----> 4 grid = GridSearchCV(xgb, params, cv=3, n_jobs=-1)
      5 grid.fit(X, y)

NameError: name 'GridSearchCV' is not defined
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/1631483089.py in <module>
      1 # 최적의 하이퍼파라미터를 찾음
----> 2 grid.best_params_

NameError: name 'grid' is not defined
 
실행 완료
[24]:
3173.045180496539

3) RandomizedSearchCV

RandomizedSearchCV는 GridSearchCV와 달리 랜덤으로 N개의 조합만 탐색함
(시간 내 최적의 하이퍼파라미터 탐색)

 
 
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/3481394564.py in <module>
      1 #  Randomized Search
      2 xgb = XGBRegressor()
----> 3 grid = RandomizedSearchCV(xgb, params, cv=3, n_iter=10, n_jobs=-1)
      4 grid.fit(X, y)

NameError: name 'RandomizedSearchCV' is not defined
 
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/1631483089.py in <module>
      1 # 최적의 하이퍼파라미터를 찾음
----> 2 grid.best_params_

NameError: name 'grid' is not defined