본문 바로가기
AI/Machine-Learning

[sklearn] GridSearchCV - 파라미터 튜닝

by Wikinist 2023. 8. 30.

GridSearchCV는 scikit-learn 라이브러리에서 제공하는 하이퍼파라미터 튜닝을 위한 도구 중 하나입니다. 기계 학습 모델을 만들 때, 모델의 성능을 최적화하기 위해 사용되는 하이퍼파라미터들을 조정해야 할 때가 많습니다. 이때 GridSearchCV는 가능한 모든 조합을 시도하여 최적의 조합을 찾아내는 데 도움을 줍니다.

주어진 하이퍼파라미터들의 조합을 "그리드" 형태로 나열하고, 각각의 조합에 대해 교차 검증(cross-validation)을 수행하여 모델의 성능을 평가합니다. 교차 검증은 데이터를 여러 개의 부분 집합으로 나눈 뒤, 한 부분은 검증(validation)에 사용하고 나머지 부분은 훈련(training)에 사용하는 과정입니다. 이를 여러 번 반복하여 모델의 성능을 안정적으로 평가합니다.

과정

GridSearchCV를 사용하는 기본적인 과정은 다음과 같습니다:

하이퍼파라미터 그리드 정의: 탐색할 하이퍼파라미터들과 각각의 가능한 값을 지정합니다. 예를 들어, 분류 모델에서 학습률과 규제 강도 등이 그리드에 포함될 수 있습니다.

모델 선택: 최적화하려는 기계 학습 알고리즘을 선택하고, 해당 모델 객체를 생성합니다.

GridSearchCV 객체 생성: 앞서 정의한 하이퍼파라미터 그리드와 모델을 사용하여 GridSearchCV 객체를 생성합니다. 교차 검증의 폴드 수나 성능 지표 등도 설정할 수 있습니다.

그리드 탐색 실행: GridSearchCV 객체의 fit 메서드를 호출하여 그리드 탐색을 실행합니다. 이때 모든 가능한 하이퍼파라미터 조합에 대해 교차 검증이 수행됩니다.

최적 모델 선택: 탐색이 완료되면, 가장 좋은 성능을 보이는 하이퍼파라미터 조합과 그에 따른 모델이 선택됩니다.

결과 확인 및 활용: 최적의 하이퍼파라미터 조합과 모델을 사용하여 예측을 수행하거나 추가적인 분석을 진행할 수 있습니다.

GridSearchCV는 가능한 모든 조합을 탐색하므로, 하이퍼파라미터 그리드가 크고 데이터가 많은 경우에는 계산 비용이 높아질 수 있습니다. 이런 경우에는 더 효율적인 하이퍼파라미터 탐색 알고리즘을 고려할 수도 있습니다.

예제

이 예제에서는 scikit-learn의 분류 모델인 SVC (Support Vector Classifier)를 사용하고, C와 gamma 두 개의 하이퍼파라미터를 그리드 탐색하여 최적의 조합을 찾는 예제입니다.

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target

# 훈련 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SVC 모델 생성
model = SVC()

# 탐색할 하이퍼파라미터 그리드 정의
param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': [0.1, 0.01, 0.001, 0.0001],
}

# GridSearchCV 객체 생성
grid_search = GridSearchCV(model, param_grid, cv=3)

# 그리드 탐색 실행
grid_search.fit(X_train, y_train)

# 최적의 하이퍼파라미터와 성능 출력
print("Best Parameters: ", grid_search.best_params_)
print("Best Score: ", grid_search.best_score_)

# 최적의 모델을 사용하여 테스트 데이터 예측 및 평가
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print("Test Accuracy: ", accuracy)

이 예제에서는 SVC 모델을 사용하며, C와 gamma라는 두 개의 하이퍼파라미터를 탐색합니다. param_grid에는 가능한 하이퍼파라미터 값들을 리스트로 정의해두었습니다. 그리고 GridSearchCV 객체를 생성하여 모델과 하이퍼파라미터 그리드를 전달하고 교차 검증을 수행합니다. 최종적으로 최적의 하이퍼파라미터와 해당 조합에서의 성능을 출력하고, 최적의 모델을 사용하여 테스트 데이터를 평가합니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

ROC curve  (0) 2023.08.30
[sklearn] 모델 성능 평가(정확도, f1)  (0) 2023.08.30
L1 규제와 L2 규제  (0) 2023.08.30
[sklearn] LogisticRegression  (0) 2023.08.29
Logit과 Sigmoid함수와 로지스틱회귀  (0) 2023.08.29