숫자 데이터셋에 대한 교차 검증

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실험은 손글씨 숫자 이미지 데이터셋에서 서포트 벡터 머신 (SVM) 과 교차 검증을 사용합니다. 이는 손글씨 숫자 이미지에서 숫자를 식별하는 분류 문제입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

데이터셋 로드

먼저, scikit-learn 에서 숫자 데이터셋을 로드하고 특징 (features) 과 레이블 (labels) 로 분할해야 합니다.

import numpy as np
from sklearn import datasets

X, y = datasets.load_digits(return_X_y=True)

서포트 벡터 머신 (SVM) 모델 생성

다음으로 선형 커널을 사용하는 SVM 모델을 생성합니다.

from sklearn import svm

svc = svm.SVC(kernel="linear")

테스트할 하이퍼파라미터 값 정의

규제 매개변수 C 의 다양한 값을 테스트할 것입니다. C 는 마진 최대화와 분류 오류 최소화 사이의 트레이드오프를 제어합니다. 10^-10 과 1 사이에 10 개의 로그 스케일 값을 테스트할 것입니다.

C_s = np.logspace(-10, 0, 10)

교차 검증 수행 및 결과 기록

각 C 값에 대해 10 겹 교차 검증을 수행하고 점수의 평균과 표준 편차를 기록합니다.

from sklearn.model_selection import cross_val_score

scores = list()
scores_std = list()
for C in C_s:
    svc.C = C
    this_scores = cross_val_score(svc, X, y, n_jobs=1)
    scores.append(np.mean(this_scores))
    scores_std.append(np.std(this_scores))

결과 플롯

마지막으로, C 의 함수로서 평균 점수를 플롯하고 표준 편차를 시각화하기 위해 오차 막대도 포함합니다.

import matplotlib.pyplot as plt

plt.figure()
plt.semilogx(C_s, scores)
plt.semilogx(C_s, np.array(scores) + np.array(scores_std), "b--")
plt.semilogx(C_s, np.array(scores) - np.array(scores_std), "b--")
locs, labels = plt.yticks()
plt.yticks(locs, list(map(lambda x: "%g" % x, locs)))
plt.ylabel("CV 점수")
plt.xlabel("매개변수 C")
plt.ylim(0, 1.1)
plt.show()

요약

이 실험에서는 숫자 데이터셋에 SVM 모델을 사용하여 정규화 매개변수 C 의 다양한 값에 대해 10 겹 교차 검증을 수행했습니다. C 와 평균 교차 검증 점수 간의 관계를 시각화하기 위해 결과를 플롯했습니다. 이는 하이퍼파라미터를 조정하고 모델 성능을 평가하는 데 유용한 기법입니다.