해결된 질문
작성
·
289
답변 2
0
레이블 인코딩을 예를 들어보면
fit -> 사전 만들기(학습 개념)
transform -> 데이터 변경
fit_transform은 두 가지 작업을 진행해요!
데이터에
train데이터에 [사과, 포도, 딸기]가 있고, test에 [포도, 딸기]가 있다면
- fit을 통해 사과:0, 포도:1, 딸기:2 라고 사전을 만들고
- transform 으로 train(0, 1, 2)과 test(0, 2)데이터에 데이터를 변경하는 작업이 수행됩니다.
동일한 사전으로 적용하기 위해 test는 fit_transform을 하지 않아요! (해도 에러가 발생하지는 않습니다.)
스케일링도 동일해도 train 데이터로 계산한 부분을 test에 적용하기 위함이에요!
한 단계 더 들어가면 test데이터 정보 누수를 막을 수 있어요!
0
안녕하세요, 인프런 AI 인턴입니다.
먼저 질문자님께서 제기하신 “왜 train 데이터만 fit_transform 하고 test 데이터는 그냥 transform 하는 건지요?“에 대한 답변은, 데이터의 일관성과 모델의 일반화 성능을 유지하기 위함입니다.
fit_transform이란 메서드는, 기본적으로 훈련 데이터셋에 대해 fit과 transform을 동시에 수행합니다. 여기서 fit은 데이터 변환을 위한 기준 정보(예: 최소값, 최대값 등)를 설정하는 과정이고, transform은 이러한 기준 정보를 바탕으로 데이터를 변환하는 과정입니다. 훈련 데이터에 대해 fit_transform을 수행함으로써, 모델이 학습하는 동안의 데이터 처리 규칙을 설정하게 됩니다.
반면, 테스트 데이터에 대해서는 transform만 수행하는데, 이는 fit 과정 없이, 훈련 데이터로부터 이미 설정된 규칙(데이터의 범위, 평균, 표준편차 등)을 테스트 데이터에 적용하기 위함입니다. 만약 테스트 데이터에 대해서도 fit_transform을 수행한다면, 테스트 데이터로부터 새로운 변환 기준을 설정하게 되어, 훈련 시에 사용된 기준과 달라질 수 있습니다. 이는 모델이 처음 보는 데이터에 대해 일관된 방식으로 예측을 수행하는 것이 아니게 되어, 모델의 일반화 성능을 저하시키는 요인이 됩니다.
특히, 머신러닝에서 모델의 일반화 능력은 중요한 평가 지표 중 하나입니다. 모델이 훈련 데이터에만 과도하게 최적화되어 실제 세계에서 발생할 수 있는 다양한 데이터에 대해 잘 예측하지 못하는 상황을 피하기 위해, 위와 같은 데이터 전처리 절차를 따르는 것입니다.
즉, 훈련 데이터에만 fit을 적용하여 데이터 변환 기준을 설정하고, 이 기준을 훈련 및 테스트 데이터에 모두 적용(transform)함으로써, 모델의 일반화 성능을 유지하는 것입니다.
다음은 질문자님의 질문과 관련된 공식적인 답변이 포함된 게시글입니다:
위 링크를 통해 보다 구체적인 설명과 예제를 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.