STUDY/ML

[ML] fit_transform()과 transform()

moru_xz 2023. 3. 18. 15:20

1. fit_transform()과 transform()의 차이

2. train 데이터에 fit_transform()이 아니라 transform()을 사용한다면?

3. train데이터와 test데이터를 나누기 전에 one hot encoding 해도 될까?

4. pd.get_dummies()와 sklearn의 OneHotEncoder()의 차이

 

  • fit_transform()과 transform()의 차이

- fit_transform() 메서드는 모델을 학습(fit)하고 데이터를 변환(transform)하는 과정을 한 번에 수행

- 즉, 학습 데이터에 대해서는 모델을 학습(fit)하고, 학습된 모델을 사용하여 학습 데이터를 변환(transform)

but, 테스트 데이터는 모델을 학습시키는 과정에서 사용되지 않으므로, 따로 학습(fit)할 필요가 없음

 

- transform()은 모델 학습시킬 필요 없을 때 사용 

- 테스트 데이터에 대해서는 이미 학습된 모델을 사용하여 변환(transform)만 하면 됨 

 

  • train 데이터에 fit_transform()이 아니라 transform()을 사용하면 나중에 결과가 달라지나?

- train 데이터에 fit_transform() 메서드를 사용하면, 모델이 train 데이터에 대해 적합한 변환 방법을 학습(fit)하고, 그 결과를 바탕으로 train 데이터를 변환(transform)

-> 이때, 학습된 변환 방법은 모델 내부에 저장

 

- train 데이터에 transform() 메서드를 사용하면, 모델이 train 데이터에 대해 학습(fit)하지 않고, 미리 학습된 변환 방법을 사용하여 train 데이터를 변환(transform)

-> only 변환, 모델은 학습하지 않음!! -> 결과 달라질 수 있음 

 

  • train데이터와 test데이터를 나누기 전에 one hot encoding 해도 될까?

- 안됨 데이터 누수(leakage)문제 발생 

- train 데이터와 test 데이터를 나누기 전에 전체 데이터에 대해 one hot encoding을 수행하게 되면, test 데이터에 대한 정보가 train 데이터에 누설될 수 있음

- 이는 모델 성능을 과장할 수 있으며, 실제 배포할 때 모델 성능이 예상보다 낮아지는 원인이 될 수 있음

 

  • pd.get_dummies()와 sklearn의 OneHotEncoder()의 차이
  pd.get_dummies()  OneHotEncoder()
장점 - 사용이 간편하고 코드가 간결
- pandas 데이터프레임 형식으로 출력되어 가독성이 좋음
- 데이터프레임의 내장 함수이므로, pandas를 사용한 데이터 전처리와 함께 사용할 때 유용
- 희소 행렬(sparse matrix) 형태로 변환하여 메모리 사용량을 줄이고 연산 속도를 높임
- 변환된 데이터를 numpy 배열 형식으로 출력하여 머신러닝 모델에 직접 적용할 수 있음
- handle_unknown 매개변수를 사용하여 학습 데이터에 없는 새로운 범주값을 처리할 수 있음
단점 - 범주형 변수의 수가 매우 많을 경우, 매우 많은 열(차원)을 가지는 데이터프레임을 생성하여 메모리 사용량을 증가시킬 수 있음
- 학습 데이터에 없는 새로운 범주값이 나타날 경우, 새로운 열(차원)이 추가되어 모델 성능에 영향을 줄 수 있음
- 사용 방법이 상대적으로 복잡 -> 사용하기 위해서는 import와 객체 생성, fit과 transform 또는 fit_transform 메서드 등 여러 단계가 필요
- 출력된 데이터가 numpy 배열 형태로 출력되어, 가독성이 떨어질 수 있음
- 변환된 데이터가 희소 행렬(sparse matrix) 형태로 출력되어, 행렬 연산을 수행할 때 더 많은 계산을 필요로 함
사용 - 만약, 데이터가 pandas 데이터프레임 형태로 주어져 있고 전처리 과정에서 다른 pandas 함수를 함께 사용해야 한다면 pd.get_dummies() 함수를 사용하는 것이 편리

- 반면에, 데이터가 numpy 배열 형태로 주어져 있거나 데이터의 크기가 크다면 OneHotEncoder() 클래스를 사용하는 것이 더 효율적일 수 있습니다.

 

'STUDY > ML' 카테고리의 다른 글

[딥러닝] 심층 신경망  (0) 2023.04.12
[ML] Binary Encoding과 One Hot Encoding  (0) 2023.03.18
[혼공머신] 01. 나의 첫 머신러닝  (0) 2023.02.10