Scikit-learn GridSearchCV에 cv 설정
교차 검증(cross validation): 머신 러닝 모델의 일반화 성능을 평가하는 데 사용되는 방법
모델을 하나의 데이터셋에서 훈련하고 다른 데이터셋에서 평가하는 대신, 교차 검증은 데이터셋을 여러 하위 집합으로 나누고 이러한 하위 집합 중 일부에서 모델을 훈련한 다음 나머지 하위 집합에서 모델을 평가
- 모델의 성능을 더 신뢰할 수 있는 추정을 제공
- 과적합을 감지하는 데 도움
- 더 나은 모델 선택 및 하이퍼파라미터 튜닝이 가능
- 훈련 및 테스트 목적으로 사용 가능한 데이터의 활용을 극대화
기본 cross validation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
# iris 데이터셋 불러오기
iris = load_iris()
X = iris.data
y = iris.target
# classifier 설정
clf = DecisionTreeClassifier()
# cross-validation 수행
scores = cross_val_score(clf, X, y, cv=5)
print("Accuracy:", scores.mean())
StratifiedKFold
각 폴드에서 클래스의 비율을 보존하는 교차 검증 기법
- 이는 각 폴드가 원본 데이터셋과 유사한 타겟 클래스 분포를 갖도록 보장
- 특히 클래스 불균형이 있는 데이터셋에 유용
1
2
3
4
5
6
7
8
9
from sklearn.model_selection import StratifiedKFold
# StratifiedKFold 설정
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# cross-validation 수행
skf_scores = cross_val_score(clf, X, y, cv=skf)
print("StratifiedKFold Accuracy:", skf_scores.mean())
GridSearchCV에 cv 설정
GridSearchCV
의 cv
매개변수는 다음과 같은 다양한 교차 검증 전략이 적용 가능하다.
KFold
교차 검증의 폴드 수를 지정하는 정수 값- 교차 검증 분할기의 인스턴스(e.g.,
KFold
,StratifiedKFold
,TimeSeriesSplit
등) - 훈련/테스트 분할을 생성하는 교차 검증 이터레이터
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn.model_selection import GridSearchCV
# hyperparameter grid 설정
param_grid = {
'max_depth': [3, 5, 7],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# GridSearchCV 설정
grid_search = GridSearchCV(clf, param_grid, cv=skf)
# Fit
grid_search.fit(X, y)
print("Best Parameters:", grid_search.best_params_)
print("Best Score:", grid_search.best_score_)
This post is licensed under CC BY 4.0 by the author.