k-폴드 교차 검증에 대한 짧은 소개

교차 유효성 검사는 머신러닝 모델의 기술을 추정하는 데 사용되는 통계적 방법입니다.

응용 머신러닝에서 주어진 예측 모델링 문제에 대한 모델을 비교하고 선택하는 데 일반적으로 사용되는 이유는 이해하기 쉽고 구현하기 쉬우며 일반적으로 다른 방법보다 편향이 낮은 기술 추정치를 생성하기 때문입니다.

이 자습서에서는 머신러닝 모델의 기술을 추정하기 위한 k-fold 교차 유효성 검사 절차에 대한 간략한 소개를 발견할 수 있습니다.

이 자습서를 완료하면 다음을 알 수 있습니다.

  • 이 k-폴드 교차 검증은 새 데이터에 대한 모델의 기술을 추정하는 데 사용되는 절차입니다.
  • 데이터 세트의 k 값을 선택하는 데 사용할 수 있는 일반적인 전술이 있습니다.
  • scikit-learn에서 사용할 수 있는 계층화 및 반복과 같은 교차 검증에 일반적으로 사용되는 변형이 있습니다.

튜토리얼 개요

이 튜토리얼은 다음과 같이 5 부분으로 나뉩니다.

  1. k-폴드 교차 검증
  2. k의 구성
  3. 작업 예
  4. 교차 유효성 검사 API
  5. 교차 검증의 변형

k-폴드 교차 검증

교차 유효성 검사는 제한된 데이터 샘플에서 머신러닝 모델을 평가하는 데 사용되는 리샘플링 절차입니다.

프로시저에는 지정된 데이터 샘플을 분할할 그룹 수를 나타내는 k라는 단일 매개 변수가 있습니다. 따라서 이 절차를 종종 k-폴드 교차 검증이라고 합니다. k에 대한 특정 값이 선택되면 k=10이 10배 교차 검증이 되는 것과 같이 모델에 대한 참조에서 k 대신 사용될 수 있습니다.

교차 유효성 검사는 주로 응용 머신러닝에서 보이지 않는 데이터에 대한 머신러닝 모델의 기술을 추정하는 데 사용됩니다. 즉, 모델의 훈련 동안 사용되지 않은 데이터에 대한 예측을 만들기 위해 사용될 때 모델이 일반적으로 어떻게 수행될 것으로 예상되는지를 추정하기 위해 제한된 샘플을 사용합니다.

이해하기 쉽고 일반적으로 간단한 학습/테스트 분할과 같은 다른 방법보다 모델 기술에 대한 덜 편향되거나 덜 낙관적인 추정치를 생성하기 때문에 널리 사용되는 방법입니다.

일반적인 절차는 다음과 같습니다.

  1. 데이터 세트를 임의로 섞습니다.
  2. 데이터 세트를 k 그룹으로 분할
  3. 각 고유 그룹에 대해 다음을 수행합니다.
    1. 그룹을 홀드아웃 또는 테스트 데이터 집합으로 사용
    2. 나머지 그룹을 학습 데이터 세트로 사용
    3. 훈련 세트에 모델을 피팅하고 테스트 세트에서 평가합니다.
    4. 평가 점수 유지 및 모델 삭제
  4. 모델 평가 점수 샘플을 사용하여 모델의 기술을 요약합니다.

중요한 것은 데이터 표본의 각 관측치가 개별 그룹에 할당되고 절차 기간 동안 해당 그룹에 유지된다는 것입니다. 즉, 각 샘플에 홀드 아웃 세트 1 번 사용하고 모델 k-1 번 훈련하는 데 사용할 수 있는 기회가 주어집니다.

이 접근법에는 관측치 집합을 거의 동일한 크기의 k 그룹 또는 폴드로 랜덤하게 나누는 작업이 포함됩니다. 첫 번째 폴드는 검증 세트로 처리되고 방법은 나머지 k − 1 폴드에 적합합니다.

— 페이지 181, 통계 학습 입문, 2013.

또한 모델을 피팅하기 전에 데이터를 준비하는 것이 더 넓은 데이터 세트가 아닌 루프 내의 CV 할당 학습 데이터 세트에서 발생하는 것이 중요합니다. 이는 하이퍼파라미터의 모든 튜닝에도 적용됩니다. 루프 내에서 이러한 작업을 수행하지 못하면데이터가 유출되고 모델 기술이 낙관적으로 추정될 수 있습니다.

통계 방법론 전문가의 최선의 노력에도 불구하고 사용자는 실수로 테스트 데이터를 엿봄으로써 결과를 무효화하는 경우가 많습니다.

— 페이지 708, 인공 지능: 현대적인 접근 방식(3판), 2009.

k-폴드 교차 검증 실행의 결과는 종종 모델 기술 점수의 평균으로 요약됩니다. 표준 편차 또는 표준 오차와 같은 기술 점수의 분산 측정값을 포함하는 것도 좋은 방법입니다.


k의 구성

k 값은 데이터 표본에 대해 신중하게 선택해야 합니다.

k에 대해 잘못 선택된 값은 분산이 높은 점수(모형을 적합하는 데 사용된 데이터에 따라 많이 변경될 수 있음) 또는 높은 편향(예: 모형의 기술 과대 평가)과 같이 모형의 기술을 잘못 대표하는 아이디어를 초래할 수 있습니다.

k 값을 선택하는 세 가지 일반적인 전술은 다음과 같습니다.

  • 대표: k의 값은 데이터 샘플의 각 학습/테스트 그룹이 더 넓은 데이터 세트를 통계적으로 대표할 만큼 충분히 크도록 선택됩니다.
  • k=10: k의 값은 10으로 고정되며, 이 값은 실험을 통해 발견되어 일반적으로 낮은 편향과 적당한 분산을 가진 모델 기술 추정치를 산출합니다.
  • k=n: k의 값은 n으로 고정되며, 여기서 n은 각 테스트 샘플에 홀드아웃 데이터 세트에 사용할 기회를 제공하기 위한 데이터 세트의 크기입니다. 이 접근 방식을 리브-원-아웃 교차 검증이라고 합니다.

k의 선택은 일반적으로 5 또는 10이지만 공식적인 규칙은 없습니다. k가 커질수록 훈련 세트와 리샘플링 부분 세트 간의 크기 차이가 작아집니다. 이 차이가 감소하면 기술의 편향이 작아집니다.

— 페이지 70, 응용 예측 모델링, 2013.

k=10 값은 응용 머신러닝 분야에서 매우 일반적이며 데이터 세트의 값을 선택하는 데 어려움을 겪고 있는 경우 권장됩니다.

요약하자면, k-폴드 교차 검증에서 k의 선택과 관련된 편향-분산 트레이드 오프가 있습니다. 일반적으로 이러한 고려 사항이 주어지면 k = 5 또는 k = 10을 사용하여 k-fold 교차 검증을 수행하는데, 이는 이러한 값이 지나치게 높은 치우침이나 매우 높은 분산을 겪지 않는 테스트 오류율 추정치를 산출하는 것으로 경험적으로 나타났기 때문입니다.

— 페이지 184, 통계 학습 입문, 2013.

데이터 샘플을 균등하게 분할하지 않는 k 값을 선택하면 한 그룹에 나머지 예제가 포함됩니다. 데이터 샘플을 동일한 수의 샘플을 갖는 k 그룹으로 분할하여 모델 기술 점수의 샘플이 모두 동일하도록 하는 것이 바람직합니다.

k-fold 교차 검증을 구성하는 방법에 대한 자세한 내용은 다음 자습서를 참조하세요.



작업 예

교차 검증 절차를 구체적으로 만들기 위해 작업 된 예를 살펴 보겠습니다.

6개의 관측치가 있는 데이터 샘플이 있다고 가정해 보겠습니다.

첫 번째 단계는 데이터를 분할하는 데 사용되는 폴드 수를 결정하기 위해 k 값을 선택하는 것입니다. 여기서는 k=3 값을 사용합니다. 즉, 데이터를 섞은 다음 데이터를 3개의 그룹으로 분할합니다. 관측치가 6개이므로 각 그룹의 관측치 수는 2개입니다.

예를 들어:

그런 다음 머신러닝 알고리즘의 기술을 평가하는 등 샘플을 사용할 수 있습니다.

세 가지 모델이 학습되고 평가되며 각 접힘은 테스트 세트가 될 기회가 주어집니다.

예를 들어:

  • 모델1: 폴드1 + 폴드2에서 학습, 폴드3에서 테스트됨
  • 모델2: 폴드2 + 폴드3에서 학습, 폴드1에서 테스트됨
  • 모델3: 폴드1 + 폴드3에서 학습, 폴드2에서 테스트됨

그런 다음 모델은 목적에 부합하므로 평가된 후 삭제됩니다.

각 모델에 대한 기술 점수가 수집되고 요약되어 사용됩니다.



교차 유효성 검사 API

k-fold 교차 검증을 수동으로 구현할 필요가 없습니다. scikit-learn 라이브러리는 주어진 데이터 샘플을 분할하는 구현을 제공합니다.

KFold()scikit-learn 클래스를 사용할 수 있습니다. 분할 수, 샘플 셔플 여부 및 셔플 전에 사용된 의사 난수 생성기의 시드값을 인수로 사용합니다.

예를 들어 데이터 세트를 3개의 폴드로 분할하고, 분할 전에 섞고, 의사 난수 생성기에 값 1을 사용하는 인스턴스를 만들 수 있습니다.

그런 다음 데이터 샘플이 인수로 제공되는 클래스에서 split()함수를 호출 할 수 있습니다. 반복적으로 호출되면 분할은 학습 및 테스트 집합의 각 그룹을 반환합니다. 특히, 각 반복에서 학습 및 테스트 세트에 사용할 관측치의 원래 데이터 샘플에 대한 인덱스를 포함하는 배열이 반환됩니다.

예를 들어 다음과 같이 생성된 KFold인스턴스를 사용하여 데이터 샘플에 대한 인덱스 분할을 열거 할 수 있습니다.

이 모든 것을 이전 섹션의 작업 예제에서 사용 된 작은 데이터 세트와 함께 연결할 수 있습니다.

예제를 실행하면 각 학습 및 테스트 세트에 대해 선택한 특정 관측치가 인쇄됩니다. 인덱스는 원래 데이터 배열에서 직접 관측값 값을 검색하는 데 사용됩니다.

유용하게도 scikit-learn의 k-fold 교차 검증 구현은 그리드 검색 모델 하이퍼파라미터 및 데이터 세트에서 모델 점수 매기기와 같은 광범위한 방법 내에서 구성 요소 작업으로 제공됩니다.

그럼에도 불구하고 모든 모델이 동일한 데이터 분할을 사용하도록 모델링하기 전에 데이터 세트를 분할하기 위해 KFold클래스를 직접 사용할 수 있습니다. 이는 매우 큰 데이터 샘플로 작업하는 경우에 특히 유용합니다. 알고리즘 간에 동일한 분할을 사용하면 나중에 데이터에 대해 수행하려는 통계 테스트에 이점이 있을 수 있습니다.



교차 검증의 변형

k-폴드 교차 검증 절차에는 여러 가지 변형이 있습니다.

일반적으로 사용되는 세 가지 변형은 다음과 같습니다.

  • 학습/테스트 분할: 한 극단으로 간주하면 k를 2(1이 아님)로 설정하여 모델을 평가하기 위해 단일 학습/테스트 분할을 만들 수 있습니다.
  • LOOCV: 다른 극단으로 치우치면, k는 데이터 세트의 총 관측치 수로 설정되어 각 관측치가 데이터 세트에서 제외될 기회가 주어질 수 있습니다. 이를 리브-원-아웃 교차 검증 또는 줄여서 LOOCV라고 합니다.
  • 계층화: 데이터를 폴드로 분할하는 것은 각 폴드가 클래스 결과 값과 같은 주어진 범주형 값을 가진 관측치의 비율이 동일하도록 하는 것과 같은 기준에 의해 제어될 수 있습니다. 이를 계층화된 교차 검증이라고 합니다.
  • 반복: k-fold 교차 검증 절차가 n번 반복되는 곳이며, 여기서 중요한 것은 각 반복 전에 데이터 샘플이 섞여 샘플의 다른 분할을 초래한다는 것입니다.
  • 중첩: 교차 검증의 각 폴드 내에서 k-fold 교차 검증이 수행되는 위치로, 종종 모델 평가 중에 하이퍼파라미터 튜닝을 수행합니다. 이를 중첩 교차 검증 또는 이중 교차 검증이라고 합니다.


확장

이 섹션에는 탐색할 수 있는 자습서를 확장하기 위한 몇 가지 아이디어가 나열되어 있습니다.

  • k-fold 교차 검증에 값 10을 사용하는 머신러닝 연구 논문 3개를 찾습니다.
  • k-폴드 교차 검증을 사용하여 데이터 샘플을 분할하는 고유한 함수를 작성합니다.
  • scikit-learn에서 지원하는 교차 검증의 각 주요 유형을 보여주는 예제를 개발합니다.

이러한 확장 기능을 탐색하면 알고 싶습니다.


추가 정보

이 섹션에서는 더 자세히 알아보려는 경우 주제에 대한 더 많은 리소스를 제공합니다.


관련 튜토리얼



요약

이 자습서에서는 머신러닝 모델의 기술을 추정하기 위한 k-fold 교차 유효성 검사 절차에 대한 간략한 소개를 발견했습니다.

특히 다음 내용을 배웠습니다.

  • 이 k-폴드 교차 검증은 새 데이터에 대한 모델의 기술을 추정하는 데 사용되는 절차입니다.
  • 데이터 세트의 k 값을 선택하는 데 사용할 수 있는 일반적인 전술이 있습니다.
  • scikit-learn에서 사용할 수 있는 계층화 및 반복과 같은 교차 검증에 일반적으로 사용되는 변형이 있습니다.
네피리티
No Comments

Sorry, the comment form is closed at this time.