해결된 질문
작성
·
67
·
수정됨
0
안녕하세요 선생님
수치형 데이터(n_train, n_test)와 범주형 데이터(c_train, c_test)를 분리하여 처리하는 이유가 있을까요? 분리했다가 합치는게 직관적으로 잘 이해가 안되어서요.
X_train[cols] 또는 X_test[cols]로 처리하면 안되나요?
아 그리고 train data만 fit_transform하고 test data는 transform만 하는 자세한 이유도 궁금합니다. 아직 학습 모델링 적용 전에 전처리 하는 과정에서도 학습을 하는건가요? (수치형만 학습, 범주형 중 원핫인코딩은 학습이 없는 것도 이유가 궁금합니다. )
미리 감사합니다.
답변 2
0
# 데이터를 나누지 않고 get_dummies사용하면 범주형만 자동으로 원핫인코딩 처리함
train = pd.get_dummies(train)
결론
나누지 않아도 됩니다.
나눴던 이유는 데이터 복잡도가 올라갔을 때 컬럼을 지정해서 처리하려고 했습니다만 시험의 난이도는 낮은 수준이라 판다스의 겟더미즈를 사용한다면 범주형 데이터만 자동으로 원핫인코딩 됩니다.
스케일링과 같은 작업은 그렇게 처리할 수 있습니다만 원핫인코딩과 같은 처리는 컬럼수가 늘어나는 것이어서 처리에 어려움이 있습니다.
통일성을 위해서 입니다.
레이블 인코딩을 예를 들면
train에서 [사과, 배, 포도, 사과]가 있고
test에서 [배, 포도] 가 있을 때
fit_transform
fit 은 사전을 만듭니다. 사과 0, 배 1, 포도2 그리고
transform은 변환합니다. [0, 1, 2, 0]가 됩니다.
Test에도 똑같은 사전을 적용하기 위함입니다.
만약 테스트 에서도 fit_transform 로 처리 해버리면 배 0, 포도 1로 레이블 인코딩될 수 있어요!
0
안녕하세요, 인프런 AI 인턴입니다. 김진주님.
수치형 데이터와 범주형 데이터를 분리하여 처리하는 이유는 데이터 전처리에서 각 데이터 타입에 맞는 적절한 처리를 하기 위함입니다. 수치형 데이터의 경우 스케일링이나 정규화와 같은 전처리를 통해 모델이 잘 학습할 수 있도록 하고, 범주형 데이터는 원핫 인코딩이나 라벨 인코딩을 통해 데이터의 형태를 변환합니다. 이렇게 분리하여 전처리를 하면 코드가 명확하게 구분될 수 있어 가독성을 높이는 장점이 있습니다.
그러나 수치형과 범주형 컬럼을 분리하지 않고 X_train[cols]와 같은 방식으로 특정 컬럼에 대해서만 처리하는 것도 가능합니다. 다만, 이 경우 각 열에 대한 적절한 전처리를 기억하고 정확하게 적용해야 합니다.
유사한 내용이 다루어졌던 관련 질문과 답변 링크를 공유드립니다:
위 답변에서는 수치형과 범주형 데이터 분리에 대한 전략과 그 이점에 대해 설명하고 있습니다. 각각의 상황에 맞춰 데이터를 처리하는 방법을 선택하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.