Hippo's data
하이퍼파라미터(Hyperparameter) 튜닝 - 그리드서치, 랜덤서치 본문
모델의 성능을 향상하는 방법은 여러가지가 있습니다
학습데이터를 깔끔하게 정제/전처리하거나 중요한 변수들을 선택(Feature selection)하는 등 다양한 방법이 있는데요
그중 오늘은 모델의 하이퍼파라미터를 조정하는 방법에 대해 알아보겠습니다!!!
# 하이퍼파라미터(Hyperparameter)란?
사용자가 직접 모델 학습방식을 조절하는 것을 뜻하는데요
의사결정나무(Decision tree)의 최대 깊이(max depth)를 설정하거나 딥러닝 모델의 학습률(learning rate), epoch 에포크 수를 지정하는 것들이 이에 해당합니다
# 파라미터(parameter)란?
반면) 파라미터는 데이터로부터 자동적으로 결정되는 값을 의미하는데요 회귀 모델 계수(가중치) / 절편, 딥러닝 모델에서의 가중치가 이에 해당합니다
하이퍼파라미터 튜닝은 도메인적인 지식을 기반으로 수동으로 설정하는데요
자동적으로 하이퍼파라미터 튜닝을 하는 방법에 대해 소개하겠습니다!!
1. 그리드 서치(Grid Search)
2. 랜덤 서치(Random Search)
1. 그리드 서치(Grid Search)
그리드는 격자라는 뜻을 의미하는데요
빽뻭한 그리드(격자)처럼 가능한 모든 하이퍼파라미터 값의 조합에 대해 모델성능을 측정, 비교하며 최적의 하이퍼파라미터 값을 찾는 방식입니다
< 구현 >
그리드 서치 기능은 사이킷런 라이브러리에서 제공됩니다
from sklearn.model_selection import GridSearchCV # 그리드 서치 라이브러리 불러오기
from sklearn.ensemble import RandomForestClassifier # 랜덤포레스트 모델 불러오기
model = RandomForestClassifier() # 모델생성
# 탐색할 하이퍼파라미터 그리드 설정
param_grid = {
'n_estimators': [10, 50, 100, 200], # 트리의 수
'max_features': ['auto', 'sqrt', 'log2'], # 분할에 사용할 특성의 수
'max_depth': [4, 5, 6, 7, 8], # 트리의 최대 깊이
'criterion': ['gini', 'entropy'] # 분할 품질을 측정하는 기능
}
# GridSearchCV 생성, 실행
grid_search = GridSearchCV(model, param_grid, refit=True, verbose=2)
# refit=True 자동으로 최적의 파라미터로 재학습 / verbose -> 설명의 양 설정
grid_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터, 성능 출력
print("최적의 파라미터: ", grid_search.best_params_)
print("최고 점수: ", grid_search.best_score_)
# GridSearchCV의 refit 기능을 사용하여 자동으로 재학습된 모델
best_model = grid_search.best_estimator_
# 테스트 데이터셋을 사용한 성능 평가
predictions = best_model.predict(X_test)
2. 랜덤 서치(Random Search)
랜덤서치는 랜덤한 조합이 선택되어 최적의 하이퍼파라미터 값을 찾는 방식입니다
파라미터의 탐색 범위가 넓거나 연속적인 값을 탐색해야 할 경우 효율적입니다
< 구현 >
from sklearn.model_selection import RandomizedSearchCV # 랜덤 서치 라이브러리 불러오기
from sklearn.ensemble import RandomForestClassifier # 랜덤포레스트 모델 불러오기
model = RandomForestClassifier() # 모델생성
# 탐색할 하이퍼파라미터 분포 설
param_distributions = {
'n_estimators': [10, 50, 100, 200],
'max_features': ['auto', 'sqrt', 'log2'],
'max_depth': [4, 5, 6, 7, 8],
'criterion': ['gini', 'entropy']
}
# RandomizedSearchCV 생성, 실행
random_search = RandomizedSearchCV(model, param_distributions, n_iter=10, refit=True, verbose=2)
random_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터, 성능 출력
print("최적의 파라미터: ", random_search.best_params_ )
print("최고 점수: ", random_search .best_score_)
# RandomizedSearchCV의 refit 기능을 사용하여 자동으로 재학습된 모델
best_model = random_search.best_estimator_
# 테스트 데이터셋을 사용한 성능 평가
predictions = best_model.predict(X_test)
'ML(Machine Learning)' 카테고리의 다른 글
t-SNE(t-distributed Stochastic Neighbor Embedding) 구현 (0) | 2024.01.20 |
---|---|
PCA(Principal Component Analysis) 주성분 분석 구현 (0) | 2024.01.14 |
앙상블(Ensemble) (0) | 2024.01.08 |
머신러닝 주요 모델 모델링(Scikit-learn) (0) | 2024.01.08 |
모델 평가 - 회귀(Regression) 모델 (0) | 2024.01.07 |