k-폴드 교차 검증에 대한 짧은 소개
교차 유효성 검사는 머신러닝 모델의 기술을 추정하는 데 사용되는 통계적 방법입니다.
응용 머신러닝에서 주어진 예측 모델링 문제에 대한 모델을 비교하고 선택하는 데 일반적으로 사용되는 이유는 이해하기 쉽고 구현하기 쉬우며 일반적으로 다른 방법보다 편향이 낮은 기술 추정치를 생성하기 때문입니다.
이 자습서에서는 머신러닝 모델의 기술을 추정하기 위한 k-fold 교차 유효성 검사 절차에 대한 간략한 소개를 발견할 수 있습니다.
이 자습서를 완료하면 다음을 알 수 있습니다.
- 이 k-폴드 교차 검증은 새 데이터에 대한 모델의 기술을 추정하는 데 사용되는 절차입니다.
- 데이터 세트의 k 값을 선택하는 데 사용할 수 있는 일반적인 전술이 있습니다.
- scikit-learn에서 사용할 수 있는 계층화 및 반복과 같은 교차 검증에 일반적으로 사용되는 변형이 있습니다.
튜토리얼 개요
이 튜토리얼은 다음과 같이 5 부분으로 나뉩니다.
- k-폴드 교차 검증
- k의 구성
- 작업 예
- 교차 유효성 검사 API
- 교차 검증의 변형
k-폴드 교차 검증
교차 유효성 검사는 제한된 데이터 샘플에서 머신러닝 모델을 평가하는 데 사용되는 리샘플링 절차입니다.
프로시저에는 지정된 데이터 샘플을 분할할 그룹 수를 나타내는 k라는 단일 매개 변수가 있습니다. 따라서 이 절차를 종종 k-폴드 교차 검증이라고 합니다. k에 대한 특정 값이 선택되면 k=10이 10배 교차 검증이 되는 것과 같이 모델에 대한 참조에서 k 대신 사용될 수 있습니다.
교차 유효성 검사는 주로 응용 머신러닝에서 보이지 않는 데이터에 대한 머신러닝 모델의 기술을 추정하는 데 사용됩니다. 즉, 모델의 훈련 동안 사용되지 않은 데이터에 대한 예측을 만들기 위해 사용될 때 모델이 일반적으로 어떻게 수행될 것으로 예상되는지를 추정하기 위해 제한된 샘플을 사용합니다.
이해하기 쉽고 일반적으로 간단한 학습/테스트 분할과 같은 다른 방법보다 모델 기술에 대한 덜 편향되거나 덜 낙관적인 추정치를 생성하기 때문에 널리 사용되는 방법입니다.
일반적인 절차는 다음과 같습니다.
- 데이터 세트를 임의로 섞습니다.
- 데이터 세트를 k 그룹으로 분할
- 각 고유 그룹에 대해 다음을 수행합니다.
- 그룹을 홀드아웃 또는 테스트 데이터 집합으로 사용
- 나머지 그룹을 학습 데이터 세트로 사용
- 훈련 세트에 모델을 피팅하고 테스트 세트에서 평가합니다.
- 평가 점수 유지 및 모델 삭제
- 모델 평가 점수 샘플을 사용하여 모델의 기술을 요약합니다.
중요한 것은 데이터 표본의 각 관측치가 개별 그룹에 할당되고 절차 기간 동안 해당 그룹에 유지된다는 것입니다. 즉, 각 샘플에 홀드 아웃 세트 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-폴드 교차 검증을 구성하는 방법
- 머신러닝 알고리즘 평가를 위한 LOOCV
- Python을 사용한 머신러닝을 위한 중첩된 교차 유효성 검사
- 파이썬에서 모델 평가를 위해 반복되는 k-폴드 교차 검증
- 불균형 분류에 대한 k-폴드 교차 검증을 수정하는 방법
- 머신러닝 알고리즘 평가를 위한 학습-테스트 분할
요약
이 자습서에서는 머신러닝 모델의 기술을 추정하기 위한 k-fold 교차 유효성 검사 절차에 대한 간략한 소개를 발견했습니다.
특히 다음 내용을 배웠습니다.
- 이 k-폴드 교차 검증은 새 데이터에 대한 모델의 기술을 추정하는 데 사용되는 절차입니다.
- 데이터 세트의 k 값을 선택하는 데 사용할 수 있는 일반적인 전술이 있습니다.
- scikit-learn에서 사용할 수 있는 계층화 및 반복과 같은 교차 검증에 일반적으로 사용되는 변형이 있습니다.