move84

머신러닝 기초 – 하이퍼파라미터 튜닝과 그리드 서치(Grid Search) 본문

머신러닝

머신러닝 기초 – 하이퍼파라미터 튜닝과 그리드 서치(Grid Search)

move84 2025. 2. 25. 13:37
반응형

머신러닝 모델의 성능을 극대화하려면 하이퍼파라미터 튜닝(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)는 사용자가 지정한 여러 개의 하이퍼파라미터 조합을 모두 테스트하여 최적의 조합을 찾는 방법이다.

✅ 그리드 서치 과정

  1. 튜닝할 하이퍼파라미터 선택
  2. 가능한 여러 개의 값(하이퍼파라미터 그리드) 정의
  3. 모든 조합을 시도하면서 모델 성능 평가
  4. 최적의 조합을 선택

🛠 그리드 서치 구현 (파이썬 예제)

✅ 데이터셋과 모델 준비

먼저, scikit-learnGridSearchCV를 활용하여 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']])

🚀 그리드 서치의 장점과 단점

✅ 장점

  1. 직관적: 모든 하이퍼파라미터 조합을 탐색하므로 사용하기 쉽다.
  2. 재현 가능성: 같은 데이터와 설정에서 동일한 결과를 얻을 수 있다.
  3. 병렬 처리 가능: 여러 조합을 동시에 실험할 수 있어 연산 시간을 단축할 수 있다.

❌ 단점

  1. 연산 비용이 큼: 모든 조합을 탐색해야 하므로 계산량이 많음.
  2. 조합이 많아질수록 시간이 오래 걸림: 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): 데이터를 여러 번 나누어 학습/평가하는 기법

🔥 키워드

  • 하이퍼파라미터 튜닝
  • 그리드 서치
  • 랜덤 서치
  • 머신러닝 최적화
반응형