본문 바로가기
Python/Machine Learning

K-Fold 와 Stratified K-Fold 교차검증

by 좌우지간에 2024. 12. 30.

K-Fold 교차 검증 (K-Fold Cross-Validation):

간단하게 말해서: "데이터를 여러 묶음으로 나눠서, 돌아가면서 훈련시키고 평가하는 방법"

 

 

예시:

  • 과자 포장: 100개의 과자가 있다고 생각해 봅시다. 이 과자를 5개씩 20묶음으로 나눕니다.
  • 평가:
    1. 첫 번째 묶음은 맛을 보는 사람(평가)에게 주고, 나머지 19묶음으로 새로운 과자를 만드는 연습을 합니다(훈련).
    2. 두 번째 묶음을 맛보게 하고, 나머지 19묶음으로 과자를 만드는 연습을 합니다.
    3. 이런 식으로 5번 반복합니다.
  • 결론: 맛을 본 5번의 결과를 평균내서 "과자를 만들고 평가하는 능력"이 어느 정도인지 확인합니다.

 

 

쉽게 풀어서:

  • 데이터를 나눔: 데이터를 여러 개의 작은 묶음(폴드)으로 나눕니다.
  • 돌아가며 학습: 한 묶음씩 돌아가면서 "테스트용"으로 사용하고, 나머지는 "훈련용"으로 사용합니다.
  • 평가: 테스트용으로 사용한 묶음을 가지고 모델이 얼마나 잘 예측하는지 확인합니다.
  • 평균: 평가 결과를 평균내서 최종적인 모델의 성능을 파악합니다.

 

 

이럴 때 쓰면 좋아요:

  • 데이터가 엄청 많을 때
  • 데이터의 종류(클래스) 비율이 비슷할 때

 

Stratified K-Fold 교차 검증 (Stratified K-Fold Cross-Validation):

간단하게 말해서: "데이터를 나눌 때, 각 종류의 비율을 비슷하게 맞춰서 나눠서 돌아가면서 훈련시키고 평가하는 방법"

 

 

예시:

  • 과자 포장: 이번에는 딸기맛 과자 80개, 초코맛 과자 20개가 있습니다. 이걸 5묶음으로 나누는데, 각 묶음에 딸기맛 8개, 초코맛 2개씩 들어가도록 나눕니다.
  • 평가:
    1. 첫 번째 묶음을 평가용으로 주고, 나머지 4묶음으로 과자를 만드는 연습을 합니다.
    2. 두 번째 묶음을 평가용으로 주고, 나머지 4묶음으로 과자를 만드는 연습을 합니다.
    3. 이런 식으로 5번 반복합니다.
  • 결론: 맛을 본 5번의 결과를 평균내서 "과자를 만들고 평가하는 능력"이 어느 정도인지 확인합니다.

 

 

쉽게 풀어서:

  • 데이터를 나눌 때 종류를 고려: 데이터 종류별 비율을 비슷하게 유지하면서 묶음(폴드)을 만듭니다.
  • 나머지는 K-Fold와 똑같음: 한 묶음씩 돌아가면서 테스트용, 훈련용으로 사용하고 평가합니다.

 

 

이럴 때 쓰면 좋아요:

  • 데이터의 종류(클래스) 비율이 많이 다를 때 (예: 암 환자 데이터에서 암 환자가 아닌 사람보다 더 적을 때)
  • 클래스 불균형이 있을 때

 

 

핵심 차이:

  • K-Fold: 그냥 데이터 묶음을 랜덤으로 나눔
  • Stratified K-Fold: 데이터 종류별 비율을 고려해서 묶음을 만듦

 

 

 

왜 Stratified K-Fold가 필요할까?

만약 K-Fold를 썼는데, 운이 나쁘게 테스트 세트에 초코맛 과자가 하나도 안 들어갔다면, 초코맛 과자를 평가할 능력이 있는지 제대로 평가할 수 없겠죠? Stratified K-Fold는 그런 상황을 막기 위해서 각 묶음에 데이터 종류별 비율을 비슷하게 맞춰주는 것입니다.

정리:

  • K-Fold: 데이터를 막 섞어서 여러 묶음으로 나누고 돌아가면서 학습/평가하는 방법 (간단하지만, 클래스 불균형에 약함)
  • Stratified K-Fold: 데이터 종류 비율을 고려해서 묶음을 나누고 돌아가면서 학습/평가하는 방법 (클래스 불균형에 강함)

 

 

Stratified K-Fold의 핵심:

  • Stratified K-Fold는 데이터를 나눌 때 클래스(종류, 범주) 비율을 유지하는 것이 핵심입니다.
  • 클래스 비율을 유지하려면 각 데이터가 어떤 클래스에 속하는지 알아야 합니다.
  • 즉, Stratified K-Fold를 사용하기 위해서는 데이터가 클래스 레이블을 가지고 있어야 합니다. (분류 문제)

 

 

Stratified 에서 분류 작업이 필요한 이유:

  1. 클래스 정보 필요:
    • Stratified K-Fold는 각 폴드 안에 특정 클래스의 데이터를 똑같은 비율로 포함시키려고 합니다.
    • 이러한 분할을 수행하려면, 각 데이터가 속한 클래스 정보 (예: "고양이", "강아지", "개", "고양이") 가 필요합니다.
  2. 레이블링 필수:
    • 데이터가 어떤 클래스에 속하는지 표시하는 것을 레이블링이라고 합니다.
    • 따라서, Stratified K-Fold를 사용하려면 데이터에 미리 레이블링 작업이 되어있어야 합니다.
  3. 비지도 학습에는 적합하지 않음:
    • 클러스터링과 같이 레이블 정보가 없는 비지도 학습에는 Stratified K-Fold를 사용할 수 없습니다. (비지도 학습은 데이터의 숨겨진 구조를 발견하는 것이 목표이므로, 데이터에 미리 정의된 클래스 레이블이 없습니다.)

 

 

예시:

  • 분류 문제 (Stratified K-Fold 사용 O):
    • 스팸 메일 분류: 각 메일이 "스팸"인지 "정상 메일"인지 레이블링되어 있어야 합니다.
    • 이미지 분류: 각 이미지가 "고양이", "강아지", "새" 등 어떤 클래스에 속하는지 레이블링되어 있어야 합니다.
    • 질병 진단: 각 환자의 데이터가 "정상", "질병 1", "질병 2" 등 어떤 클래스에 속하는지 레이블링되어 있어야 합니다.
  • 회귀 문제 (Stratified K-Fold 사용 X):
    • 집 가격 예측: 집의 크기, 위치 등 정보를 이용하여 집 가격을 예측하는 경우, 가격은 연속된 값이기 때문에 클래스 레이블이 없습니다.
    • 주가 예측: 과거 주가 데이터를 이용하여 미래 주가를 예측하는 경우, 주가 역시 연속된 값이므로 클래스 레이블이 없습니다.

 

 

정리:

  • Stratified K-Fold는 데이터를 클래스 비율을 유지하며 나누어야 하므로, 데이터에 미리 분류 작업이 되어 있어야 합니다.
  • 레이블이 있는 분류 문제에 적합하며, 레이블이 없는 비지도 학습 문제에는 적용할 수 없습니다.
  • 회귀 문제와 같이 연속된 값을 예측하는 문제에는 Stratified K-Fold 대신 K-Fold나 다른 적절한 교차 검증 방법을 사용해야 합니다.

'Python > Machine Learning' 카테고리의 다른 글

[TIL] 하이퍼 파라미터 튜닝  (2) 2025.01.02
챕터 2 과제정리 2  (3) 2024.12.31
챕터2 과제정리 1  (5) 2024.12.28
[TIL] 머신러닝 파이프 라인 개념  (1) 2024.12.24
[TIL] 데이터 전처리 인코딩, 스케일링  (1) 2024.12.23