일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- python3
- 오라클
- 알고리즘
- 파이썬
- Kaggle
- 카카오
- sklearn
- 실기
- seaborn
- 데이터 분석
- 실습
- 머신러닝
- matplotlib
- level 1
- SQL
- 코딩테스트
- R
- Python
- Oracel
- 빅분기
- level 2
- 튜닝
- Numpy
- 빅데이터 분석 기사
- oracle
- pandas
- 프로그래머스
- Today
- Total
라일락 꽃이 피는 날
[Sklearn] Hyperparameter 튜닝 본문
Hyperparameter 튜닝
hypterparameter 튜닝시 경우의 수가 너무 많기 때문에 자동화할 필요가 있다.
자주 사용되는 hyperparameter 튜닝을 돕는 클래스는 다음 2가지가 있다.
- RandomizedSearchCV
- GridSearchCV
적용하는 방법
1. 사용할 Search 방법을 선택한다.
2. hyperparameter 도메인을 설정한다. (max_depth, n_estimators 등)
3. 학습을 시킨 후, 기다린다.
4. 도출된 결과 값을 모델에 적용하고 성능을 비교한다.
RandomizedSearchCV
모든 매개 변수 값이 시도되는 것이 아니라 지정된 분포에서 고정 된 수의 매개 변수 설정이 샘플링된다.
시도 된 매개 변수 설정의 수는 n_iter에 의해 제공된다.
주요 Hyperparameter (LGBM)
- random_state: 랜덤 시드 고정 값. 고정해두고 튜닝할 것!
- n_jobs: CPU 사용 갯수
- learning_rate: 학습율. 너무 큰 학습율은 성능을 떨어뜨리고, 너무 작은 학습율은 학습이 느리다. 적절한 값을 찾아야함. n_estimators와 같이 튜닝 (default=0.1)
- n_estimators: 부스팅 스테이지 수. (랜덤포레스트 트리의 갯수 설정과 비슷한 개념) (default=100)
- max_depth: 트리의 깊이. 과대적합 방지용 (default=3)
- colsample_bytree: 샘플 사용 비율 (max_features와 비슷한 개념). 과대적합 방지용 (default=1.0)
from sklearn.model_selection import RandomizedSearchCV
params = {
'n_estimators': [200, 500, 1000, 2000],
'learning_rate': [0.1, 0.05, 0.01],
'max_depth': [6, 7, 8],
'colsample_bytree': [0.8, 0.9, 1.0],
'subsample': [0.8, 0.9, 1.0]
}
clf = RandomizedSearchCV(LGBMRegressor(), params, random_state=42, cv=3, n_iter=25, scoring='neg_mean_squared_error')
clf.fit(x_train, y_train)
best_score_
best_params_
best_params_ 결과를 Hyperparameter에 적용하기
lgbm_best = LGBMRegressor(n_estimators=2000, subsample=0.8, max_depth=7, learning_rate=0.01, colsample_bytree=0.8)
lgbm_best_pred = lgbm_best.fit(x_train, y_train).predict(x_test)
GridSearchCV
모든 매개 변수 값에 대하여 완전 탐색을 시도한다.
따라서, 최적화할 parameter가 많다면 시간이 매우 오래걸린다.
from sklearn.model_selection import GridSearchCV
params = {
'n_estimators': [500, 1000],
'learning_rate': [0.1, 0.05, 0.01],
'max_depth': [7, 8],
'colsample_bytree': [0.8, 0.9],
'subsample': [0.8, 0.9,],
}
grid_search = GridSearchCV(LGBMRegressor(), params, cv=3, n_jobs=-1, scoring='neg_mean_squared_error')
grid_search.fit(x_train, y_train)
best_score_
best_params_
best_params_ 결과를 Hyperparameter에 적용하기
lgbm_best = LGBMRegressor(n_estimators=500, subsample=0.8, max_depth=7, learning_rate=0.05, colsample_bytree=0.8)
lgbm_best_pred = lgbm_best.fit(x_train, y_train).predict(x_test)
'데이터 분석 > Python' 카테고리의 다른 글
[Sklearn] 군집화 (0) | 2021.05.21 |
---|---|
[Sklearn] 차원 축소 (0) | 2021.05.21 |
[Sklearn] Cross Validation (0) | 2021.05.17 |
[Sklearn] 앙상블 (Ensemble) - Stacking, Weighted Blending (0) | 2021.05.17 |
[Sklearn] 앙상블 (Ensemble) - 부스팅 (Boosting) (0) | 2021.05.17 |