수색…


교차 검증

예측 함수의 매개 변수를 학습하고 동일한 데이터에서 테스트하는 것은 방법 론적 실수입니다. 방금 본 샘플의 레이블을 반복하면 모델은 완벽한 점수를 얻지 만 아직 예측할 수없는 기능을 예측하지는 못합니다. 보이지 않는 데이터. 이 상황을 오버 피팅 (overfitting )이라고 합니다 . 이를 피하기 위해, (감독 된) 기계 학습 실험을 수행하여 사용 가능한 데이터의 일부를 테스트 세트 X_test, y_test 로 유지하는 것이 X_test, y_test 입니다. "실험"이라는 단어는 상업적 환경에서도 기계 학습이 일반적으로 실험적으로 시작되기 때문에 학술적 용도로만 사용됩니다.

scikit-learn 에서는 train_test_split 도우미 함수를 사용하여 무작위로 훈련 및 테스트 세트로 분할 할 수 있습니다. 선형 지원 벡터 머신에 맞게 조리개 데이터 세트를로드 해 봅시다.

>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm

>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))

이제 분류 기준을 테스트 (평가)하기 위해 데이터의 40 %를 보유하면서 교육 세트를 신속하게 샘플링 할 수 있습니다.

>>> X_train, X_test, y_train, y_test = cross_validation.train_test_split(
...     iris.data, iris.target, test_size=0.4, random_state=0)

>>> X_train.shape, y_train.shape
((90, 4), (90,))
>>> X_test.shape, y_test.shape
((60, 4), (60,))

자, 우리가 훈련과 시험 세트를 가지고 있다면 그것을 사용할 수 있습니다 :

>>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)   

케이 폴드 교차 검증

K- 폴 교차 검증은 열차 / 시험 분할의 단일 시험과 관련된 변동을 줄이기 위해 열차 / 시험 분할 절차를 여러 번 반복하는 체계적인 프로세스입니다. 기본적으로 전체 데이터 세트를 K 개의 동일한 크기 "폴드"로 분할하고 각 폴드는 모델을 테스트하기 위해 한 번 사용하고 모델을 훈련하기 위해 K-1 번 사용합니다.

Scikit 라이브러리에는 여러 가지 접기 기술을 사용할 수 있습니다. 사용법은 입력 데이터 특성에 따라 다릅니다. 몇 가지 예는 다음과 같습니다.

케이 폴드

기본적으로 전체 데이터 세트를 K 개의 동일한 크기 "폴드"로 분할하고 각 폴드는 모델을 테스트하기 위해 한 번 사용하고 모델을 훈련하기 위해 K-1 번 사용합니다.

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = KFold(n_splits=3, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]

StratifiedKFoldStratifiedKFold 폴드를 반환하는 k-fold의 변형입니다. 각 세트에는 전체 집합과 각 대상 클래스의 샘플 백분율이 거의 같습니다

ShuffleSplit

독립적 인 기차 / 테스트 데이터 세트 스플릿의 사용자 정의 번호를 생성하는 데 사용됩니다. 샘플을 먼저 섞은 다음 기차 세트와 테스트 세트로 나눕니다.

from sklearn.model_selection import ShuffleSplit
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [3 1 0] TEST: [2]
TRAIN: [2 1 3] TEST: [0]
TRAIN: [0 2 1] TEST: [3]

StratifiedShuffleSplit 은 계층화 된 분할을 반환하는 ShuffleSplit의 변형입니다. 즉, 전체 집합과 마찬가지로 각 대상 클래스에 대해 동일한 비율을 유지함으로써 분할을 생성합니다.

Leave One / p Out, TimeSeriesSplit (K-fold의 변형)과 같은 다른 폴딩 기술은 scikit model_selection 라이브러리에서 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow