K-Fold 교차 검증 (K-Fold Cross-Validation):
간단하게 말해서: "데이터를 여러 묶음으로 나눠서, 돌아가면서 훈련시키고 평가하는 방법"
예시:
- 과자 포장: 100개의 과자가 있다고 생각해 봅시다. 이 과자를 5개씩 20묶음으로 나눕니다.
- 평가:
- 첫 번째 묶음은 맛을 보는 사람(평가)에게 주고, 나머지 19묶음으로 새로운 과자를 만드는 연습을 합니다(훈련).
- 두 번째 묶음을 맛보게 하고, 나머지 19묶음으로 과자를 만드는 연습을 합니다.
- 이런 식으로 5번 반복합니다.
- 결론: 맛을 본 5번의 결과를 평균내서 "과자를 만들고 평가하는 능력"이 어느 정도인지 확인합니다.
쉽게 풀어서:
- 데이터를 나눔: 데이터를 여러 개의 작은 묶음(폴드)으로 나눕니다.
- 돌아가며 학습: 한 묶음씩 돌아가면서 "테스트용"으로 사용하고, 나머지는 "훈련용"으로 사용합니다.
- 평가: 테스트용으로 사용한 묶음을 가지고 모델이 얼마나 잘 예측하는지 확인합니다.
- 평균: 평가 결과를 평균내서 최종적인 모델의 성능을 파악합니다.
이럴 때 쓰면 좋아요:
- 데이터가 엄청 많을 때
- 데이터의 종류(클래스) 비율이 비슷할 때
Stratified K-Fold 교차 검증 (Stratified K-Fold Cross-Validation):
간단하게 말해서: "데이터를 나눌 때, 각 종류의 비율을 비슷하게 맞춰서 나눠서 돌아가면서 훈련시키고 평가하는 방법"
예시:
- 과자 포장: 이번에는 딸기맛 과자 80개, 초코맛 과자 20개가 있습니다. 이걸 5묶음으로 나누는데, 각 묶음에 딸기맛 8개, 초코맛 2개씩 들어가도록 나눕니다.
- 평가:
- 첫 번째 묶음을 평가용으로 주고, 나머지 4묶음으로 과자를 만드는 연습을 합니다.
- 두 번째 묶음을 평가용으로 주고, 나머지 4묶음으로 과자를 만드는 연습을 합니다.
- 이런 식으로 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 에서 분류 작업이 필요한 이유:
- 클래스 정보 필요:
- Stratified K-Fold는 각 폴드 안에 특정 클래스의 데이터를 똑같은 비율로 포함시키려고 합니다.
- 이러한 분할을 수행하려면, 각 데이터가 속한 클래스 정보 (예: "고양이", "강아지", "개", "고양이") 가 필요합니다.
- 레이블링 필수:
- 데이터가 어떤 클래스에 속하는지 표시하는 것을 레이블링이라고 합니다.
- 따라서, Stratified K-Fold를 사용하려면 데이터에 미리 레이블링 작업이 되어있어야 합니다.
- 비지도 학습에는 적합하지 않음:
- 클러스터링과 같이 레이블 정보가 없는 비지도 학습에는 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 |