반응형
🗺️ [복습 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}
반응형
'두두 IT > 머신런닝(ML)' 카테고리의 다른 글
| TODO와 함께하는 복습 - 6 (결정트리 & 랜덤포레스트) (0) | 2026.05.26 |
|---|---|
| TODO와 함께하는 복습 - 5 (KNN & SVM) (0) | 2026.05.25 |
| TODO와 함께하는 복습 - 3 (파이프라인) (0) | 2026.05.25 |
| TODO와 함께하는 복습 - 2 (데이터 전처리) (0) | 2026.05.25 |
| TODO와 함께하는 복습 - 1 (머신러닝 분석, 데이터셋 나누기) (0) | 2026.05.25 |