1. 모델 하이퍼파라미터 튜닝
모델 내 하이퍼파라미터를 조정하여 모델의 성능을 끌어올리는 작업이다.
A. 직접 튜닝
최적의 하이퍼파라미터를 찾아주는 함수들이 있지만, 튜닝 과정을 전적으로 일임하는 것은 옳지 않다. 엔지니어가 직접 여러 값을 넣어보며 조정하는 과정이 꼭 필요하다. 이를 통해 모델에 대한 통찰을 얻고 효율적으로 시간을 쓸 수 있다.
모델별로 중요한 하이퍼파라미터
- 트리 기반 - max_depth
- 부스팅 - max_depth, learning_rate
- 회귀 - alpah, C
B. Grid Search
검증하고자 하는 하이퍼파라미터 범위 내에서 모든 조합에 대해 모델을 학습하고 그 중 가장 좋은 조합을 선택한다. 튜닝할 파라미터 수가 많으면 시간이 오래 걸려 효율적이지 못하다.
from sklearn.model_selection import GridSearchCV
params = {
"simpleimputer__strategy": ["median", "mean"],
"xgbclassifier__max_depth": [2, 4, 6]}
grid_search = GridSearchCV
(pipe,
param_grid=params,
scoring="roc_auc", # 모델 성능 비교 기준이 될 검증지표
cv=3, # cross validaition 횟수
verbose=3)
# params 갯수에 cv까지 곱하면 search 횟수를 구할 수 있다
# 2 * 3 * 3 = 18
grid_search.fit(X_train, y_train)
print("최적 하이퍼파라미터: ", grid_search.best_params_)
print("최적 AUC: ", grid_search.best_score_)
* GridSearch에서 하이퍼파라미터 verbose의 의미는?
iteration시마다 수행 결과 메시지를 출력!
- verbose=0(default)면 메시지 출력 안함
- verbose=1이면 간단한 메시지 출력
- verbose=2이면 하이퍼 파라미터별 메시지 출력
출처 : https://www.inflearn.com/questions/62112/gridsearchcv%EC%97%90%EC%84%9C-verbose
C. Randomized Search
검증하고자 하는 파라미터 범위 내에서 랜덤으로 몇개의 조합을 학습하고 이 중 가장 좋은 조합을 선택한다. 탐색 횟수를 지정해주므로 범위가 넓더라도 Grid Search에 비해 탐색이 빠르다. 모든 조합에 대해 검증하지는 않으므로 최적의 조합을 놓칠 수 있다.
from sklearn.model_selection import RandomizedSearchCV
params = {
"simpleimputer__strategy": ["median", "mean"],
"xgbclassifier__max_depth": [2, 4, 6]}
randomized_search = RandomizedSearchCV(
model,
param_distributions=params,
scoring="roc_auc",
n_iter=10, # 몇개의 조합을 테스트 하겠는가
cv=3,
verbose=3,
random_state=42)
# 횟수에 cv값을 곱하면 총 search 횟수를 구할 수 있다
# 10 * 3 = 30
randomized_search.fit(X_train, y_train)
print("최적 하이퍼파라미터: ", randomized_search.best_params_)
print("최적 AUC: ", randomized_search.best_score_)
D. Bayesian Search
검증하고자 하는 파라미터 범위 내에서 이전에 탐색한 조합들의 성능을 기반으로 최적의 조합을 확률적으로 탐색한다. Randomized Search보다 효율적으로 탐색하며 한정된 자원에서 좋은 파라미터 조합을 발견할 가능성이 높다. sklearn에서는 이 기능을 제공하지 않고 hyperopt 라이브러리에서 쓸 수 있다
2. 특성 선택
데이터가 충분한 상황에서는 중요하지 않은 특성이 포함된 데이터셋을 학습해도 성능이 크게 떨어지지 않는다. 하지만 데이터가 충분치 않은 상황에서는 과적합을 유발할 수 있어 불필요한 특성을 배제하는 것이 중요하다.
A. 직관 기반 선택
개발자가 직접 중요하지 않은 특성을 선택하고 제거하는 방법이며 꼭 필요한 과정이다.
B. 특성 중요도 기반 선택
# 선형회귀 기반 모델
model.coefficient
# 트리 기반 모델
model.feature_importance
'Codestates AI 부트캠프 > 2. Machine Learning' 카테고리의 다른 글
[머신러닝] 3-2 모델 해석 (분석 단위 기준) (0) | 2023.04.16 |
---|---|
[머신러닝] 3-1 모델 해석 (특성 기준) (0) | 2023.04.16 |
[머신러닝] 2-3 전처리 (Preprocessing) (0) | 2023.04.16 |
[머신러닝] 2-2 Boosting (1) | 2023.04.16 |
[머신러닝] 2-1 Tree Based Model (0) | 2023.04.16 |