Table of Contents
728x90
하이퍼파라미터 튜닝은 머신러닝 모델의 성능을 최적화하기 위해 하이퍼파라미터 값을 조정하는 과정입니다. 하이퍼파라미터는 학습 알고리즘의 동작을 제어하는 설정 값으로, 모델 학습 과정에서 직접적으로 학습되는 파라미터가 아닙니다. 하이퍼파라미터 튜닝은 모델의 성능에 큰 영향을 미칠 수 있으며, 이를 효과적으로 수행하기 위한 여러 가지 방법이 있습니다.
주요 하이퍼파라미터 튜닝 방법
- 그리드 탐색 (Grid Search)
- 모든 가능한 하이퍼파라미터 조합을 시도하여 최적의 하이퍼파라미터를 찾는 방법입니다.
- 탐색 공간이 커질수록 계산 비용이 증가하지만, 모든 조합을 시도하므로 최적의 조합을 찾을 확률이 높습니다.
- 랜덤 탐색 (Random Search)
- 그리드 탐색과 달리, 하이퍼파라미터 공간에서 무작위로 조합을 선택하여 탐색하는 방법입니다.
- 탐색 공간이 크더라도 상대적으로 적은 계산 비용으로 좋은 결과를 찾을 수 있는 가능성이 있습니다.
- 베이지안 최적화 (Bayesian Optimization)
- 이전의 평가 결과를 바탕으로 다음 탐색 지점을 선택하여 하이퍼파라미터를 튜닝하는 방법입니다.
- 탐색 과정을 모델링하여 최적의 하이퍼파라미터를 더 효율적으로 찾을 수 있습니다.
- 대표적인 라이브러리:
Hyperopt
,Optuna
,BayesianOptimization
- 진화 알고리즘 (Evolutionary Algorithms)
- 진화론적 원리에 기반한 알고리즘으로, 자연 선택 과정과 유사하게 하이퍼파라미터를 최적화하는 방법입니다.
- 대표적인 알고리즘:
Genetic Algorithm
,Particle Swarm Optimization
- 하이퍼밴드 (Hyperband)
- 랜덤 탐색과 빌딩(blocking) 방식을 결합하여 효율적으로 하이퍼파라미터를 최적화하는 방법입니다.
- 모델의 성능을 빠르게 평가하고, 성능이 낮은 하이퍼파라미터 조합을 빨리 배제합니다.
그리드 탐색 (Grid Search) 예시
Scikit-learn의 GridSearchCV
를 사용하여 그리드 탐색을 수행하는 예제입니다.
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import classification_report
# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)
# 하이퍼파라미터 그리드 설정
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
# 랜덤 포레스트 모델 생성
rf = RandomForestClassifier(random_state=42)
# 그리드 탐색 수행
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, scoring='f1_macro')
grid_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터 출력
print("Best Parameters:", grid_search.best_params_)
# 테스트 데이터에 대한 성능 평가
y_pred = grid_search.predict(X_test)
print("Classification Report:\n", classification_report(y_test, y_pred))
랜덤 탐색 (Random Search) 예시
Scikit-learn의 RandomizedSearchCV
를 사용하여 랜덤 탐색을 수행하는 예제입니다.
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV, train_test_split
from sklearn.metrics import classification_report
from scipy.stats import randint
# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)
# 하이퍼파라미터 분포 설정
param_dist = {
'n_estimators': randint(50, 200),
'max_depth': [None, 10, 20, 30],
'min_samples_split': randint(2, 11)
}
# 랜덤 포레스트 모델 생성
rf = RandomForestClassifier(random_state=42)
# 랜덤 탐색 수행
random_search = RandomizedSearchCV(estimator=rf, param_distributions=param_dist, n_iter=50, cv=5, scoring='f1_macro', random_state=42)
random_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터 출력
print("Best Parameters:", random_search.best_params_)
# 테스트 데이터에 대한 성능 평가
y_pred = random_search.predict(X_test)
print("Classification Report:\n", classification_report(y_test, y_pred))
베이지안 최적화 예시 (Optuna)
Optuna 라이브러리를 사용하여 베이지안 최적화를 수행하는 예제입니다.
import optuna
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import make_scorer, f1_score
# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)
def objective(trial):
# 하이퍼파라미터 탐색 공간 설정
n_estimators = trial.suggest_int('n_estimators', 50, 200)
max_depth = trial.suggest_categorical('max_depth', [None, 10, 20, 30])
min_samples_split = trial.suggest_int('min_samples_split', 2, 10)
# 모델 생성
rf = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_split=min_samples_split, random_state=42)
# 교차검증을 통한 성능 평가
score = cross_val_score(rf, X_train, y_train, cv=5, scoring=make_scorer(f1_score, average='macro')).mean()
return score
# 최적화 실행
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50)
# 최적의 하이퍼파라미터 출력
print("Best Parameters:", study.best_params_)
# 최적 모델로 학습 및 테스트 데이터 평가
best_rf = RandomForestClassifier(**study.best_params_, random_state=42)
best_rf.fit(X_train, y_train)
y_pred = best_rf.predict(X_test)
print("Classification Report:\n", classification_report(y_test, y_pred))
요약
- 그리드 탐색 (Grid Search): 모든 가능한 하이퍼파라미터 조합을 시도하여 최적의 조합을 찾습니다.
- 랜덤 탐색 (Random Search): 하이퍼파라미터 공간에서 무작위로 조합을 선택하여 탐색합니다.
- 베이지안 최적화 (Bayesian Optimization): 이전 평가 결과를 바탕으로 효율적으로 하이퍼파라미터를 탐색합니다.
- 진화 알고리즘 (Evolutionary Algorithms): 자연 선택 과정을 모방하여 하이퍼파라미터를 최적화합니다.
- 하이퍼밴드 (Hyperband): 모델의 성능을 빠르게 평가하고, 효율적으로 하이퍼파라미터를 최적화합니다.
각 방법은 상황에 따라 장단점이 있으므로, 데이터의 크기와 모델의 복잡성에 맞춰 적절한 방법을 선택하는 것이 중요합니다.
'ML' 카테고리의 다른 글
클러스터링에서 거리 계산 방법 (0) | 2024.05.29 |
---|---|
클러스터링 Clustering (0) | 2024.05.29 |
교차검증(Cross-Validation) (0) | 2024.05.29 |
Classification Model 평가 및 지표 해석 (0) | 2024.05.29 |
Validation set (0) | 2024.05.29 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- English
- cnn
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- t5
- Lora
- LLM
- LIST
- Numpy
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- speaking
- RAG
- 손실함수
- recursion #재귀 #자료구조 # 알고리즘
- PEFT
- nlp
- 리스트
- 해시
- Hugging Face
- Transformer
- Python
- 티스토리챌린지
- 코딩테스트
- 오블완
- Github
- git
- classification
- 파이썬
- clustering
- Array
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함