본문 바로가기
두두 IT/머신런닝(ML)

TODO와 함께하는 복습 - 4 (파이프라인+그리드 서치)

by DoDo's 2026. 5. 25.
반응형

🗺️ [복습 4단계] 파이프라인 + 그리드 서치 (하이퍼파라미터 튜닝)

"AI 모델 안에는 우리가 직접 손으로 돌려서 맞춰야 하는 수십 개의 다이얼(하이퍼파라미터)이 있어.
이걸 사람이 일일이 돌려가며 테스트하려면 밤을 새워야 해.

**그리드 서치(GridSearchCV)**는 컴퓨터한테 '내가 다이얼 번호 후보 몇 개 줄 테니까, 네가 5번씩 모의고사(CV) 쳐가면서 모든 조합을 다 돌려봐. 그리고 제일 성적이 좋은 **황금 다이얼 세팅(Best Parameter)**을 찾아와!'라고 시키는 완벽한 자동화 도구야."

💻 핵심 코드 해설

파이프라인과 그리드 서치를 합치면 머신러닝 코딩의 끝판왕이 완성됩니다.

Python
from sklearn.model_selection import GridSearchCV

# 1. 파이프라인 구축 (앞서 배운 것)
pipeline = make_pipeline(StandardScaler(), SVC())

# 2. 튜닝할 다이얼(파라미터) 후보들 정하기
# 🚨 주의: 파이프라인 안에 있는 모델의 파라미터를 튜닝할 때는
# 반드시 '모델이름소문자__파라미터명' 형태로 언더바 2개(__)를 연결해서 써야 합니다!
param_grid = {
    'svc__C': [0.1, 1, 10],       # 3가지 후보
    'svc__gamma': [0.01, 0.1, 1]  # 3가지 후보
}
# 총 3 x 3 = 9가지 조합을 테스트하게 됩니다.

# 3. 그리드 서치 기계에 파이프라인과 후보군 넣기 (cv=5는 5등분 교차검증)
grid_search = GridSearchCV(pipeline, param_grid, cv=5)

# 4. 밤새서 모든 조합 테스트 및 학습 (실행!)
grid_search.fit(X_train, y_train)

# 5. 결과 확인
print("1등 황금 세팅:", grid_search.best_params_)

📝 TODO 실습 문제: 그리드 서치 자동화 시스템 만들기

자, 이제 직접 컴퓨터에게 노가다를 시켜볼 차례입니다! 결정 트리(Decision Tree) 모델의 핵심 다이얼인 '트리의 최대 깊이(max_depth)'를 튜닝하려고 합니다.

아래 코드의 빈칸(___) 4개를 채워 완성해 보세요.

Python
 
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier

# 1. 파이프라인 생성 (스케일러 + 결정트리)
pipe = make_pipeline(StandardScaler(), DecisionTreeClassifier(random_state=42))

# 2. 탐색할 다이얼(파라미터) 후보 딕셔너리 만들기
# [힌트] 결정 트리 모델의 소문자 이름은 'decisiontreeclassifier' 입니다. 
# 언더바 2개(__)를 붙여서 max_depth 후보 3, 5, 7을 설정해 보세요.
params = {
    '________': [3, 5, 7]
}

# 3. 그리드 서치 객체 생성 (파이프라인과 params 연결, cv=5 설정)
grid_search = ________(pipe, param_grid=params, cv=5)

# 4. 학습 및 최적의 파라미터 찾기 (Train 데이터 입력)
grid_search.________(X_train, y_train)

# 5. 최적의 파라미터 출력
# [힌트] 가장 좋은 성적을 낸 다이얼 세팅을 보여주는 명령어
print("가장 좋은 세팅:", grid_search.________)

 

 

 

 

 

정답

Python
 
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier

# [데이터 재준비] 변수 꼬임 방지
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, test_size=0.3, random_state=0, stratify=cancer.target
)

# 1. 파이프라인 생성 (스케일러 + 결정트리)
pipe = make_pipeline(StandardScaler(), DecisionTreeClassifier(random_state=42))

# 2. 탐색할 다이얼(파라미터) 후보 딕셔너리 만들기
# ★ 핵심 수정: 모델소문자이름 + 언더바2개(__) + 파라미터명
params = {
    'decisiontreeclassifier__max_depth': [3, 5, 7]
}

# 3. 그리드 서치 객체 생성 (파이프라인과 params 연결, cv=5 설정)
grid_search = GridSearchCV(pipe, param_grid=params, cv=5)

# 4. 학습 및 최적의 파라미터 찾기 (Train 데이터 입력)
grid_search.fit(X_train, y_train)

# 5. 최적의 파라미터 출력
print("가장 좋은 세팅:", grid_search.best_params_)

 

실행값

가장 좋은 세팅: {'decisiontreeclassifier__max_depth': 5}


반응형