반응형

이전 3편에서는 K-Fold 및 Stratified K-Fold를 직접 구현하여 교차검증 과정이 어떻게 이루어지는지 확인했습니다.
하지만 KFold를 직접 다루면 코드가 길고 반복이 많아 실무에서는 효율적이지 않습니다.
이번 4편에서는 사이킷런이 제공하는 두 가지 강력한 기능을 실습합니다.
- cross_val_score(): 교차검증 자동화 도구
- GridSearchCV: 교차검증 + 하이퍼파라미터 튜닝을 동시에 수행하는 도구
이 두 기능은 머신러닝 모델 성능을 제대로 평가하고 최적화하는 데 필수적입니다.
1. cross_val_score(): 교차검증을 자동으로 처리하는 함수
왜 필요한가?
기존 KFold 방식에서는 다음을 직접 구현해야 했습니다.
- 폴드 분할
- 각 폴드에 대해 학습 및 예측
- 각 결과를 모두 수집하여 평균 계산
cross_val_score()는 이 과정을 한 줄로 자동 수행합니다.
또한 분류 문제에서는 자동으로 Stratified K-Fold가 적용되어 데이터 비율이 유지됩니다.
cross_val_score 실습
# -----------------------------------------------------------
# cross_val_score 예제: 교차검증을 자동으로 수행하는 코드
# -----------------------------------------------------------
# 결정 트리 모델을 사용하기 위한 클래스
from sklearn.tree import DecisionTreeClassifier
# 교차검증을 자동 수행하는 함수
from sklearn.model_selection import cross_val_score
# Iris 데이터셋 로딩
from sklearn.datasets import load_iris
# 수학적 계산을 위해 numpy 사용
import numpy as np
# 1. 아이리스 데이터셋 로딩
# load_iris()는 붓꽃(아이리스) 정보를 가진 대표적인 예제 데이터셋입니다.
iris_data = load_iris()
# 2. 분석을 위한 모델 객체 생성
# DecisionTreeClassifier: 결정트리를 이용한 분류 알고리즘
# random_state 고정 → 실행마다 동일한 결과를 재현 가능
dt_clf = DecisionTreeClassifier(random_state=42)
# 3. 피처(X)와 레이블(y) 분리
# iris_data.data: 꽃잎/꽃받침 길이·너비가 담긴 입력 데이터
# iris_data.target: 각 데이터의 품종 정보(0,1,2)
data = iris_data.data
label = iris_data.target
# 4. cross_val_score() 수행
# - dt_clf: 사용할 모델
# - data: 피처 데이터
# - label: 정답(레이블)
# - scoring="accuracy": 정확도 기준으로 평가
# - cv=3: 데이터를 3개의 폴드로 나누어 3번 교차검증 수행
scores = cross_val_score(dt_clf, data, label, scoring="accuracy", cv=3)
# 5. 결과 출력
# scores에는 각 폴드별 정확도가 배열로 저장되어 있습니다.
print(f"교차 검증별 정확도: {np.round(scores, 4)}")
# 평균 정확도 계산
print(f"평균 정확도: {np.round(np.mean(scores), 4)}")
핵심 포인트 요약
- cross_val_score는 모든 교차검증 작업을 자동 처리합니다.
- 분류 문제에서는 Stratified KFold 자동 적용 → 레이블 비율 유지
- 모델 성능을 보다 신뢰성 있게 평가 가능
2. GridSearchCV: 교차검증 + 하이퍼파라미터 튜닝을 동시에 수행
GridSearchCV가 필요한 이유
머신러닝 모델에는 성능에 큰 영향을 미치는 “하이퍼파라미터”가 존재합니다.
예: 결정트리의 max_depth, min_samples_split 등
GridSearchCV는 다음을 자동으로 수행합니다.
- 하이퍼파라미터 모든 조합 생성
- 각 조합에 대해 교차검증 수행
- 가장 높은 성능을 내는 조합 선택
- 최적 조합으로 모델 자동 재학습 (refit=True)
즉, 교차검증 + 최적화 + 모델 재학습까지 한 번에 처리합니다.
(1) GridSearchCV 실습
# -----------------------------------------------------------
# GridSearchCV 예제: 하이퍼파라미터 튜닝 + 교차검증
# -----------------------------------------------------------
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
# 1. 데이터 로딩
iris = load_iris()
# 2. 학습/테스트 데이터 분할
# - test_size=0.3 → 전체의 30%는 테스트 데이터
# - random_state=42 → 매 실행마다 동일한 분할 유지
X_train, X_test, y_train, y_test = train_test_split(
iris.data,
iris.target,
test_size=0.3,
random_state=42
)
# 3. 기본 결정트리 모델 생성
dtree = DecisionTreeClassifier()
# 4. 탐색할 하이퍼파라미터 조합 정의
# 총 조합 수 = 3(max_depth) * 2(min_samples_split) = 6가지
parameters = {
"max_depth": [1, 2, 3],
"min_samples_split": [2, 3]
}
# 5. GridSearchCV 설정
grid_dtree = GridSearchCV(
dtree, # 사용할 모델
param_grid=parameters, # 탐색할 파라미터 조합 목록
cv=3, # 3-Fold 교차검증
refit=True, # 최적 파라미터로 자동 재학습
return_train_score=True # 학습 점수도 저장 → 과적합 분석 가능
)
# 6. 학습 수행
# 내부적 작업:
# 1) 모든 파라미터 조합 생성
# 2) 각 조합별로 교차검증 수행
# 3) mean_test_score 기준으로 성능 비교
grid_dtree.fit(X_train, y_train)
# 7. 교차검증 전체 결과 보기
scores_df = pd.DataFrame(grid_dtree.cv_results_)
# 관심 있는 주요 컬럼만 출력
scores_df[[
"params",
"mean_test_score",
"rank_test_score",
"split0_test_score",
"split1_test_score",
"split2_test_score"
]]

(2) 최적 파라미터 + 모델 평가 – 상세 주석 포함 코드
# 8. 최적 하이퍼파라미터 출력
print(f"최적 파라미터: {grid_dtree.best_params_}")
# 9. 해당 파라미터 조합에서의 최고 평균 정확도
print(f"교차검증 최고 정확도: {grid_dtree.best_score_}")
# 10. 최적 모델 기반 테스트 데이터 예측
# 주의: refit=True 덕분에 grid_dtree 객체 자체가 이미 최적 파라미터로 재학습된 상태
pred = grid_dtree.predict(X_test)
print(f"테스트 데이터 정확도: {accuracy_score(y_test, pred)}")
# 11. best_estimator_ 활용
# best_estimator_: 최적 파라미터로 학습된 최종 모델 객체
estimator = grid_dtree.best_estimator_
# 동일하게 예측 가능
pred = estimator.predict(X_test)
print(f"best_estimator_ 기반 테스트 정확도: {accuracy_score(y_test, pred)}")

이번 4편에서는 교차검증과 모델 튜닝을 자동화해주는 두 가지 핵심 도구를 배웠습니다.
- cross_val_score: 복잡한 KFold 반복을 자동화하여 빠르게 교차검증 수행
- GridSearchCV: 교차검증 + 최적 하이퍼파라미터 탐색을 동시에 수행
실제 머신러닝 모델 개발에서는 반드시 사용되는 기능이며, 모델 성능 향상과 과적합을 방지하는 데 필수적입니다.
5편에서는 머신러닝에서 가장 중요한 단계 중 하나인 **데이터 전처리(스케일링, 인코딩, 결측치 처리 등)**를 다루며 실습을 진행하겠습니다.
반응형
'Programming' 카테고리의 다른 글
| [6편] 타이타닉 생존 예측 풀 파이프라인: 전처리부터 교차검증·튜닝까지 한 번에 정리하기 (0) | 2025.12.10 |
|---|---|
| [5편] 머신러닝 데이터 전처리 기본기: 인코딩·스케일링 실습 정리개요 (0) | 2025.12.10 |
| [3편] 교차검증(K-Fold, Stratified K-Fold)으로 모델 성능을 더 정확하게 평가하기 (0) | 2025.12.09 |
| [2편] 사이킷런으로 머신러닝 모델 실습하기: 데이터 분할, 학습, 예측, 평가까지 (0) | 2025.12.09 |
| [1편] 사이킷런(scikit-learn) 이해하기: 머신러닝 기본 개념과 예제 아이리스(Iris) 소개 (0) | 2025.12.09 |