Lightgbm 알고리즘뿐만 아니라
여러 기계학습 알고리즘을 활용하여 모델링을 수행할 때,
가장 중요하면서도 쉽지 않은 영역이
최적을 하이퍼파라미터를 찾는 일입니다.
실제로 기계학습 알고리즘의 최종 목표 역시,
좋은 성능을 보이면서, 과적합(overfitting)이 상대적으로 낮은
하이퍼 파라미터를 찾는 일이라고 할 수 있습니다.
하지만, 이런 일련의 업무는 복잡하고 지루하고 장시간 소요될 수 있는데요.
파이썬에서는 이 부분을 해결해 주는 함수가 있어요.
바로 싸이킷런 래퍼에서 제공해 주는 GridSearchCV() 함수입니다.
GridSearchCV() 함수의 주요 인수
GridSearchCV(estimator,
param_grid,
scoring=None,
n_jobs=None,
refit=True,
cv=None,
verbose=0,
pre_dispatch='2*n_jobs',
error_score=nan,
return_train_score=False)
- estimator: estimator object (scikit-learn estimator interface)
- param_grid: searching하기 위한 하이퍼 파라미터로 딕셔너리 형태로 반영
- scoring: 테스트 세트에서 교차 검증된 모델의 성능을 평가하기 위한 지표
- n_jobs: 병렬 처리하기 위한 job의 수
- refit: 전체 데이터 세트에서 가장 잘 발견된 하이퍼파라미터를 사용하여 재적함
- cv: 교차 검증을 위한 데이터 세트 수 설정
- verbose, pre_dispatch, error_score, return_train_score인수는 잘 사용하지 않음. 자세한 설명은 여기를 참고
GridSearchCV() 적용 예시
[1] 데이터 준비
데이터 준비는 아래 포스팅에 나와 있는
Step0 ~ Step2까지 나와 있는 절차대로 진행하시면 됩니다.
[2] GridSearchCV() 적용 사례
## GridSearchCV를 사용하는데 필요한 모듈 import
from sklearn.model_selection import *
from lightgbm import LGBMClassifier
## lightgbm 알고리즘 적용
lgbFirstMd = LGBMClassifier() # estimator object setting
## Searching 하기 위한 하이퍼 파라미터 setting
param_grid={
'boosting_type': ['gbdt'],
'max_depth': [1, 2, 3, 4, 5],
'num_leaves' : [3, 4, 5, 6, 7],
'learning_rate': [0.03, 0.05, 1.0, 0.2, 0.3],
'objective': ['binary'],
'metric': ['auc'],
'colsample_bytree': [0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
'subsample': [0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
'n_estimators': [5, 10, 15, 20],
'num_class': [1]
}
## GridSearchCV 함수 setting
optHyperParameterLgbm = GridSearchCV(lgbFirstMd,
param_grid = param_grid,
cv = KFold(n_splits = 3),
scoring = 'f1',
n_jobs = 4)
## Gridsearching 수행
optHyperParameterLgbm.fit(trainFinalDataSet.iloc[:,:-1], trainFinalDataSet.iloc[:,-1])
## GridSearchCV() 결과 가장 좋은 하이퍼 파라미터 확인
optHyperParameterLgbm.best_params_
결과를 보면, 대부분의 하이퍼 파라미터가
param_grid내에 있는 하이퍼 파라미터 리스트 중에서
가장 높은 값들이 선택됨을 알 수 있습니다.
이는 각 하이퍼 파라미터의 값들이 커짐에 따라
학습의 정확도가 높아질 수 있음을 의미하는데요.
중요한 것은 학습의 정확도뿐만 아니라
개발과 테스트의 성능의 변동성입니다.
변동성이 크면, 정확도가 아무리 높아도
실제 업무에 적용하기가 매우 어려워집니다.
후보 모형 1은 개발 시점 KS통계량 68% / 모형 검증 54%이고,
후보 모형 2는 개발 시점 KS통계량 54% / 모형 검증 52%이라면,
GridSearchCV 함수에 의한 결과는 후보 모형 1의 하이퍼 파라미터를 최적이라고 판단하지만,
실제 적용을 위해서는 후보 모형 2를 선택해야 합니다.
GridSearchCV 결과를 무조건 활용하기보다는
참고 용도가 사용하시는 것이 좋습니다.
'Machine Learning' 카테고리의 다른 글
Confusion Matrix, Precision-Recall, F1-Score 이해하기 (0) | 2022.08.07 |
---|---|
앙상블 학습에 대한 설명과 기법에 대한 소개 (2) | 2022.07.23 |
Python 예제를 사용한 기계 학습의 정규화 및 표준화 (0) | 2022.06.13 |
DecisionTreeClassifier (0) | 2022.06.12 |
Cross Validation(교차 검증) (0) | 2022.06.05 |
댓글