소개
머신 러닝에서 모델 선택은 주어진 데이터 세트에 가장 적합한 모델을 선택하는 과정입니다. 적절한 추정자를 선택하고 매개변수를 조정하여 최적의 성능을 달성하는 것을 포함합니다. 이 튜토리얼에서는 scikit-learn 에서 모델 선택 과정을 안내합니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
점수 및 교차 검증 점수
scikit-learn 의 추정자는 score 메서드를 통해 새 데이터에 대한 모델의 적합도 또는 예측의 품질을 평가하는 데 사용할 수 있습니다. 이 메서드는 점수를 반환하며, 값이 높을수록 성능이 더 좋습니다.
from sklearn import datasets, svm
## 숫자 데이터셋 로드
X_digits, y_digits = datasets.load_digits(return_X_y=True)
## 선형 커널을 사용하는 SVM 분류기 생성
svc = svm.SVC(C=1, kernel='linear')
## 학습 데이터에 분류기를 맞추고 테스트 데이터에 대한 점수 계산
score = svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])
예측 정확도를 더 잘 측정하기 위해 교차 검증을 사용할 수 있습니다. 교차 검증은 데이터를 여러 폴드로 나누고 각 폴드를 테스트 세트로 사용하고 나머지 폴드를 학습 세트로 사용하는 것을 포함합니다. 이 과정을 여러 번 반복하고 점수를 평균하여 전체 성능을 얻습니다.
import numpy as np
## 데이터를 3 개의 폴드로 분할
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)
## 교차 검증 수행
scores = []
for k in range(3):
X_train = list(X_folds)
X_test = X_train.pop(k)
X_train = np.concatenate(X_train)
y_train = list(y_folds)
y_test = y_train.pop(k)
y_train = np.concatenate(y_train)
scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
print(scores)
교차 검증 생성기
Scikit-learn 은 인기 있는 교차 검증 전략에 대한 학습/테스트 인덱스를 생성하는 데 사용할 수 있는 클래스 모음을 제공합니다. 이러한 클래스는 split 메서드를 가지고 있으며, 입력 데이터 세트를 받아 교차 검증 프로세스의 각 반복에 대한 학습/테스트 세트 인덱스를 생성합니다.
from sklearn.model_selection import KFold
## KFold 교차 검증을 사용하여 데이터를 K 개의 폴드로 분할
k_fold = KFold(n_splits=5)
for train_indices, test_indices in k_fold.split(X_digits):
print(f'Train: {train_indices} | test: {test_indices}')
cross_val_score 도우미 함수는 교차 검증 점수를 직접 계산하는 데 사용할 수 있습니다. 데이터를 각 교차 검증 반복에 대한 학습 및 테스트 세트로 분할하고, 추정자를 학습 세트에 훈련시키며, 테스트 세트를 기반으로 점수를 계산합니다.
from sklearn.model_selection import cross_val_score
## SVM 분류기의 교차 검증 점수 계산
scores = cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
print(scores)
그리드 검색
그리드 검색은 추정자에 대한 최상의 매개변수 값 조합을 찾는 데 사용할 수 있는 기술입니다. 매개변수 값의 그리드를 지정하고, 각 매개변수 조합에 대해 학습 데이터에 추정자를 맞추고, 가장 높은 교차 검증 점수를 생성하는 매개변수를 선택하는 것을 포함합니다.
from sklearn.model_selection import GridSearchCV
## 매개변수 값의 그리드 정의
Cs = np.logspace(-6, -1, 10)
## SVM 분류기와 매개변수 그리드를 사용하여 GridSearchCV 객체 생성
clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), n_jobs=-1)
## 학습 데이터에 GridSearchCV 객체 맞추기
clf.fit(X_digits[:1000], y_digits[:1000])
print(clf.best_score_)
print(clf.best_estimator_.C)
교차 검증된 추정자
Scikit-learn 의 일부 추정자는 내장된 교차 검증 기능을 가지고 있습니다. 이러한 교차 검증된 추정자는 교차 검증을 통해 자동으로 매개변수를 선택하여 모델 선택 프로세스를 더욱 효율적으로 만듭니다.
from sklearn import linear_model, datasets
## LassoCV 객체 생성
lasso = linear_model.LassoCV()
## 당뇨병 데이터셋 로드
X_diabetes, y_diabetes = datasets.load_diabetes(return_X_y=True)
## 데이터셋에 LassoCV 객체 맞추기
lasso.fit(X_diabetes, y_diabetes)
print(lasso.alpha_)
요약
이 튜토리얼에서는 scikit-learn 에서의 모델 선택 과정에 대해 배웠습니다. 평가 방법, 교차 검증, 그리드 검색, 그리고 교차 검증된 추정자를 탐색했습니다. 이러한 단계들을 따르면 주어진 데이터셋에 가장 적합한 추정자를 선택하고 최적의 성능을 얻기 위해 매개변수를 조정할 수 있습니다.