일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 교차 검증
- 활성화 함수
- 지도 학습
- reinforcement learning
- 차원 축소
- 회귀
- 과적합
- 신경망
- Machine Learning
- 인공지능
- Q-Learning
- 딥러닝
- 손실 함수
- q-러닝
- 자연어 처리
- Deep learning
- 머신러닝
- rnn
- 머신 러닝
- 데이터 전처리
- GRU
- python
- LSTM
- 정규화
- AI
- 최적화
- 인공 신경망
- 강화학습
- CNN
- 강화 학습
- Today
- Total
move84
머신러닝 기초 – 하이퍼파라미터 튜닝과 그리드 서치(Grid Search) 본문
머신러닝 모델의 성능을 극대화하려면 하이퍼파라미터 튜닝(Hyperparameter Tuning)이 필수적이다. 하이퍼파라미터는 모델 학습 전에 설정해야 하는 값으로, 적절한 값을 찾지 못하면 모델 성능이 저하될 수 있다. 이를 해결하는 방법 중 하나가 그리드 서치(Grid Search)이다. 이번 글에서는 하이퍼파라미터 튜닝의 개념과 그리드 서치를 활용하는 방법을 설명한다.
🔍 하이퍼파라미터(Hyperparameter)란?
머신러닝에서 하이퍼파라미터(Hyperparameter)는 모델이 학습하는 동안 변경되지 않는 외부 설정 값이다. 하이퍼파라미터는 모델의 성능에 직접적인 영향을 미치므로 최적의 값을 찾는 것이 중요하다.
✅ 하이퍼파라미터 vs 파라미터
- 파라미터(Parameter): 모델이 데이터로부터 학습하는 값 (예: 선형 회귀의 가중치, 신경망의 가중치)
- 하이퍼파라미터(Hyperparameter): 사용자가 직접 설정해야 하는 값 (예: 학습률, 결정트리의 최대 깊이)
✅ 주요 하이퍼파라미터 예시
- 선형 회귀(Linear Regression): 정규화 파라미터(alpha)
- 랜덤 포레스트(Random Forest): 트리 개수(n_estimators), 최대 깊이(max_depth)
- 서포트 벡터 머신(SVM): 커널(kernel), C값
- 신경망(Neural Networks): 학습률(learning rate), 배치 크기(batch size), 은닉층 크기(hidden layer size)
🎯 하이퍼파라미터 튜닝(Hyperparameter Tuning)의 필요성
하이퍼파라미터를 적절하게 설정하지 않으면 모델의 성능이 떨어질 수 있다.
✅ 하이퍼파라미터 설정이 잘못된 경우
- 과적합(Overfitting): 모델이 학습 데이터에 너무 집착하여 일반화가 어려움
- 과소적합(Underfitting): 모델이 충분한 학습을 하지 못하여 성능이 낮음
✅ 해결 방법
- 그리드 서치(Grid Search)
- 랜덤 서치(Random Search)
- 베이지안 최적화(Bayesian Optimization)
- 하이퍼밴드(Hyperband)
이 글에서는 가장 직관적이고 널리 사용되는 그리드 서치(Grid Search)를 중점적으로 다룬다.
📌 그리드 서치(Grid Search)란?
그리드 서치(Grid Search)는 사용자가 지정한 여러 개의 하이퍼파라미터 조합을 모두 테스트하여 최적의 조합을 찾는 방법이다.
✅ 그리드 서치 과정
- 튜닝할 하이퍼파라미터 선택
- 가능한 여러 개의 값(하이퍼파라미터 그리드) 정의
- 모든 조합을 시도하면서 모델 성능 평가
- 최적의 조합을 선택
🛠 그리드 서치 구현 (파이썬 예제)
✅ 데이터셋과 모델 준비
먼저, scikit-learn
의 GridSearchCV
를 활용하여 SVM(Support Vector Machine)
모델의 최적 하이퍼파라미터를 찾는다.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
# SVM 모델 정의
model = SVC()
# 하이퍼파라미터 그리드 설정
param_grid = {
'C': [0.1, 1, 10], # 규제 강도
'kernel': ['linear', 'rbf'], # 커널 종류
'gamma': ['scale', 'auto'] # 감마 값 설정
}
# GridSearchCV 실행
grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
# 최적 하이퍼파라미터 출력
print("최적 하이퍼파라미터:", grid_search.best_params_)
# 최적 모델로 테스트 데이터 평가
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
print("최적 모델 정확도:", accuracy_score(y_test, y_pred))
📊 그리드 서치 결과 분석
✅ grid_search.best_params_
이 속성을 사용하면 가장 좋은 성능을 보인 하이퍼파라미터 조합을 확인할 수 있다.
예제 실행 결과:
최적 하이퍼파라미터: {'C': 1, 'gamma': 'scale', 'kernel': 'rbf'}
✅ grid_search.cv_results_
모든 조합의 성능을 분석할 수 있다.
import pandas as pd
results = pd.DataFrame(grid_search.cv_results_)
print(results[['params', 'mean_test_score']])
🚀 그리드 서치의 장점과 단점
✅ 장점
- 직관적: 모든 하이퍼파라미터 조합을 탐색하므로 사용하기 쉽다.
- 재현 가능성: 같은 데이터와 설정에서 동일한 결과를 얻을 수 있다.
- 병렬 처리 가능: 여러 조합을 동시에 실험할 수 있어 연산 시간을 단축할 수 있다.
❌ 단점
- 연산 비용이 큼: 모든 조합을 탐색해야 하므로 계산량이 많음.
- 조합이 많아질수록 시간이 오래 걸림: 3개의 하이퍼파라미터에 각각 5개 값이 있으면 총 5x5x5 = 125개의 실험이 필요.
🎛 그리드 서치 vs 랜덤 서치(Random Search)
그리드 서치는 모든 조합을 탐색하지만, 랜덤 서치(Random Search)는 무작위로 일부 조합을 선택하여 평가한다.
✅ 언제 그리드 서치를 사용할까?
- 하이퍼파라미터 개수가 적고, 각 값의 중요성이 높을 때
- 연산 리소스가 충분할 때
✅ 언제 랜덤 서치를 사용할까?
- 하이퍼파라미터 개수가 많고 조합이 너무 많을 때
- 연산 리소스가 제한적일 때
🔹 랜덤 서치 구현 예제
from sklearn.model_selection import RandomizedSearchCV
random_search = RandomizedSearchCV(model, param_grid, n_iter=5, cv=5, scoring='accuracy', random_state=42)
random_search.fit(X_train, y_train)
print("랜덤 서치 최적 하이퍼파라미터:", random_search.best_params_)
🏁 정리
방법 | 장점 | 단점 |
---|---|---|
그리드 서치(Grid Search) | 모든 조합을 탐색 → 최적의 조합 보장 | 계산량이 많음 |
랜덤 서치(Random Search) | 연산 비용 절감, 빠른 탐색 가능 | 최적 조합을 놓칠 가능성이 있음 |
실전에서는 그리드 서치와 랜덤 서치를 적절히 조합하여 사용해야 한다.
🔑 주요 용어 정리
- 하이퍼파라미터(Hyperparameter): 사용자가 직접 설정하는 모델 설정 값
- 그리드 서치(Grid Search): 모든 하이퍼파라미터 조합을 탐색하는 방법
- 랜덤 서치(Random Search): 일부 조합만 랜덤하게 선택하여 탐색하는 방법
- 교차 검증(Cross Validation, CV): 데이터를 여러 번 나누어 학습/평가하는 기법
🔥 키워드
- 하이퍼파라미터 튜닝
- 그리드 서치
- 랜덤 서치
- 머신러닝 최적화
'머신러닝' 카테고리의 다른 글
머신러닝 베이지안 최적화: ML 모델을 위한 Bayesian Optimization 이해 (0) | 2025.02.25 |
---|---|
머신러닝 하이퍼파라미터 튜닝: 랜덤 서치(Random Search)의 이해 (0) | 2025.02.25 |
머신러닝 기초 – 혼동 행렬(Confusion Matrix) 분석 (0) | 2025.02.25 |
머신러닝 기초 – ROC 곡선과 AUC 지표 (0) | 2025.02.25 |
머신러닝 기초 – 정밀도(Precision), 재현율(Recall), F1-Score (0) | 2025.02.25 |