5.5.2 층화
분류 문제에서 교차 검증을 사용하는 간단한 예입니다. 여기에서는 5-폴드 CV를 사용합니다.
In [17]:
iris = datasets.load_iris() model = neighbors.KNeighborsClassifier(10) skms.cross_val_score(model, iris.data, iris.target, cv=5)
Out [17]:
array([0.9667, 1. , 1. , 0.9333, 1. ])
위에서 언급했던 것처럼, 분류 모델에 사용하는 sklearn의 교차 검증은 층화 추출의 방식을 기본으로 사용합니다. 무슨 의미일까요? 층화 추출은 훈련-테스트 세트를 분리할 때 타깃 비율을 보존하는 것을 의미합니다. 예를 하나 들어 보겠습니다. 개와 고양이 클래스가 있는 작은 데이터셋에서 학습 샘플을 2-폴드 방식으로 추출해 보겠습니다.
In [18]:
# 층화 추출을 사용하지 않습니다 pet = np.array(['cat', 'dog', 'cat', 'dog', 'dog', 'dog']) list_folds = list(skms.KFold(2).split(pet)) training_idxs = np.array(list_folds)[:, 0, :] print(pet[training_idxs])
[['dog' 'dog' 'dog'] ['cat' 'dog' 'cat']]