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 |