반응형
안녕하세요,
오늘은 OneHotEncoding시에 사용하는 OneHotEncoding.fit()과 df.get_dummies()의 차이에 대하여 알아보겠습니다.
OneHotEncoder와 pd.get_dummies()는 모두 데이터를 원-핫 인코딩하기 위한 도구지만, 용도와 세부적인 기능에서 차이가 있습니다.
1. 라이브러리와 사용 목적
- OneHotEncoder: scikit-learn의 OneHotEncoder는 주로 머신러닝 모델 학습에 필요한 데이터 전처리에서 사용됩니다. 이를 통해 변환한 데이터를 바로 scikit-learn 모델에 사용할 수 있는 형식으로 만들어 줍니다.
- pd.get_dummies: pandas의 get_dummies()는 주로 데이터프레임에서 범주형 데이터를 쉽게 인코딩하기 위해 사용됩니다. 빠르게 데이터 변환을 위해 사용되며, 모델 학습보다는 데이터 분석이나 가공에 적합합니다.
2. 기본적인 작동 방식
- OneHotEncoder는 fit() 메서드로 학습 데이터에서 고유 범주를 학습한 뒤, transform()을 통해 학습한 범주에 맞춰 데이터를 변환합니다. 새로운 데이터셋을 처리할 때도 일관성을 유지하며 학습된 범주 외의 값이 나오면 오류가 발생하게 됩니다.
- pd.get_dummies는 학습 단계를 거치지 않고, 호출하는 시점의 데이터프레임에 존재하는 모든 고유 값으로 원-핫 인코딩을 바로 수행합니다. 즉, 새 데이터셋에서 사용하면 인코딩 결과가 다를 수 있어 모델링 시엔 주의가 필요합니다.
3. 데이터 처리 유연성
- OneHotEncoder는 drop 파라미터를 통해 상수 열을 제거하거나, 특정 열을 선택해 원-핫 인코딩을 할 수 있는 등 여러 옵션을 제공합니다. 특히 handle_unknown 옵션을 통해 새로운 범주 값이 나올 경우 에러를 방지할 수도 있습니다.
- pd.get_dummies는 drop_first=True 옵션을 통해 첫 번째 열을 제거하는 정도의 간단한 옵션만을 제공합니다. 데이터프레임 전체에 대해 빠르게 인코딩할 때 유용합니다.
4. 데이터프레임 통합 여부
- OneHotEncoder는 배열 형태로 변환하여 반환하므로, 원래 데이터프레임과 통합하려면 추가적인 작업이 필요합니다.
- pd.get_dummies는 DataFrame으로 변환된 결과를 반환하므로, 원래 데이터프레임과 통합이 자연스럽습니다.
** 부가설명 - handle_unknown 옵션
handle_unknown 옵션은 OneHotEncoder에서 학습된 범주에 없는 새로운 값이 등장할 때 어떻게 처리할지 지정하는 옵션입니다.
이 옵션을 설정하지 않으면, 기본적으로 학습 데이터에 없던 새로운 범주가 transform 단계에서 나타날 경우 오류가 발생합니다. 모델이 예측에 필요한 모든 범주를 학습한 상태를 가정하기 때문에 오류가 나는 것인데요, handle_unknown 옵션을 활용하면 이 문제를 유연하게 해결할 수 있습니다.
handle_unknown 옵션 값
- 'error': 기본값으로, 학습 시 보지 못한 범주가 변환 단계에서 나타날 경우 에러를 발생시킵니다. 모델링 환경에서 예기치 못한 범주가 있을 때 코드가 중단되므로, 데이터 전처리 시 주의가 필요합니다.
- 'ignore': 학습되지 않은 새로운 범주가 나타나도 오류를 발생시키지 않고, 그 범주는 무시됩니다. 다만, 무시된 범주는 원-핫 인코딩 결과에 포함되지 않으며, 해당 값은 모두 0으로 처리됩니다.
요약 정리 -
분석 단계에서 간단한 원-핫 인코딩이 필요할 때는 pd.get_dummies()가 더 유용하고,
모델링이나 변환 일관성이 중요한 경우 OneHotEncoder가 적합합니다.
감사합니다.
반응형
'BigData' 카테고리의 다른 글
ETL이란 무엇인가? (4) | 2024.11.09 |
---|---|
predict 와 predict_proba 의 차이는 무엇인가? (0) | 2024.11.08 |
LabelEncoder와 OneHotEncoder의 차이는 무엇일까? (1) | 2024.11.05 |
빅데이터분석기사) 빅분기 실기 체험 제2유형 (0) | 2024.11.01 |
train_test_split의 파라미터에서 stratify는 언제 사용할까? (1) | 2024.11.01 |