해결된 질문
작성
·
59
·
수정됨
0
안녕하세요. 질문이 있습니다.
object 컬럼 'neighbourhood'에 대해서...
object 형 컬럼의 고유항목들이 train 데이터와 test 데이터 모두 일치하는지 확인한 후 일치하지 않으면
train 데이터와 test 데이터를 concat으로 합친 후에 인코딩을 진행하고 다시 분리해주라고 학습했습니다.
그런데 이번 수업 에어비엔비 자료에서 'neighbourhood' 항목이 일치하지 않는 것으로 확인되어
concat 과정을 진행해 주었는데 수업에서는 이 과정이 없더라구요.
관련 질문을 찾아보니 test 데이터의 항목을 train 데이터가 모두 포함하고 있으면 레이블 인코딩은 가능하고 원핫 인코딩은 불가능하다고 하신 것 같은데 이렇게 생각하니 너무 복잡한 것 같아서요.
그냥 일치하지 않는 항목이 있으면 무조건 concat을 진행해준다고 생각하면 오히려 편할 것 같은데
이렇게 생각하고 문제를 풀어도 오류가 없을지 궁금합니다.
그리고 저는 'neighbourhood' 항목이
object형이고
value가 200개 이상으로 꽤 크다고 생각했으며
price를 예측할 때 크게 의미 있는 컬럼이라는 생각이 들지 않아서
굳이 인코딩하기 보다는 과감하게 삭제를 진행했었는데요.
문제를 풀 때 이렇게 자신의 기준으로 컬럼을 삭제해도 괜찮은 건가요?
csv 파일로 생성해야 하는 target 컬럼 같은 경우
어쩔 때는 데이터 전처리 초반에 다음과 같은 코드(target = train.pop('price'))로 미리 분리를 해두거나
이번 수업처럼 검증 데이터를 분리할 때
X_train, X_val, y_train, y_val = train_test_split(train.drop('price', axis=1), train['price'], test_size=0.15, random_state=2022)
이런 식으로 함수 매개변수로 설정해주시기도 하셨잖아요.
방법이 여러 가지가 있어서 그때그때 다른 방법을 보여주신 거라고 생각하면 될까요?
그리고 test_size를 보통 20%로 잡으시던데 이번엔 15%로 잡은 이유가 별도로 있으신 건지 궁금합니다.
만약 전처리 할 때 target = train.pop('price')을 통해 미리 타겟을 분리해두면, train 데이터에 타겟 컬럼이 존재하지 않게 되잖아요. 근데 검증 데이터 분리할 때 첫 번째 매개변수로 train 데이터를 두 번째 매개변수로 타겟 값을 넣어줌으로써 학습 및 검증은 타겟값이 정상적으로 활용되는 것이 맞나요? 이 가정이 맞다면 문제가 없지만, 가정이 틀리다면 저 타겟을 왜 분리하는지 이해가 되지 않을 것 같습니다..
답변 3
0
concat
일치하지 않는 항목이 있으면 무조건 concat을 진행해준다고 생각하면 오히려 편할 것 같은데
-> 네 좋은 방법입니다 🙂 아직 한 번도 기출에서 카테고리가 달랐던 적은 없어요 🙂
타겟 분리
네 여러가지 방법을 보여드리려고 했는데
검증데이터 분리할 때 드랍이 있는게 어려워 하셔서
target = train.pop('price') 방식으로 전처리 초기에 통일하면 됩니다 🙂
비율도 0.2로 통일하시죠!! (0.2, 0.15, 0.1 중에 선택해서 진행하면 어떨까 싶어요)
네 맞습니다. 검증데이터 분리할 때 첫번째 변수를 학습용 데이터, 두번째 변수를 레이블(타겟)으로 넣습니다.
미리 분리하는 이유는 처음 코딩을 하는 학습자들이 많다보니
타겟이 문자인데 함께 인코딩 하거나 타겟이 숫자인데 함께 스케일링 하는 것들을 보았거든요
실수하지 않도록 미리 타겟을 옮겨 넣는 것을 알려드렸어요 🙂
0
0
안녕하세요, 인프런 AI 인턴입니다. kki733232님.
작업형 2의 질문에 대해 답변드리겠습니다.
컬럼 인코딩 시 데이터 일치 문제:
neighbourhood
와 같은 object형 컬럼의 경우, train과 test 간의 고유값이 일치하지 않은 상황에서 concat
을 통해 데이터를 합친 후 인코딩을 진행하는 방식은 일반적으로 사용됩니다. 이는 데이터의 차원을 일관되게 유지하기 위함입니다.concat
사용: 위 사항을 고려할 때, 객체 컬럼의 고유값 불일치가 있을 경우 언제나 concat
을 진행하는 방식도 생각할 수 있습니다. 다만, 데이터 양이나 상황에 따라 불필요한 처리일 수 있기에 케이스에 맞게 적용하는 것이 좋습니다.컬럼 삭제:
neighbourhood
처럼 카테고리가 많고 주요 예측 대상이 아닌 경우, 분석가의 판단 하에 삭제할 수 있습니다. 하지만 이를 삭제할 경우 모델에 중요한 정보를 함께 제외할 가능성을 고려해야 합니다.타겟 컬럼 분리와 데이터 분할:
train.pop('price')
와 같이 초기에 분리하거나, train_test_split
같은 함수 사용 시 분리 방법은 분석가의 편의와 코딩 스타일에 따라 다르게 적용할 수 있습니다. 기능적으로는 큰 차이가 없습니다.관련 질문 내용을 볼 수 있는 링크는 다음과 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.