소개
이 실험은 손글씨 숫자 이미지 데이터셋에서 서포트 벡터 머신 (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 와 평균 교차 검증 점수 간의 관계를 시각화하기 위해 결과를 플롯했습니다. 이는 하이퍼파라미터를 조정하고 모델 성능을 평가하는 데 유용한 기법입니다.