해결된 질문
작성
·
51
0
트레인과 테스트의 범주형 데이터가 다를 수 있어서 그냥 처음부터 두 데이터를 합쳐서 레이블이나 원-핫인코딩을 하려고 합니다
1.레이블인코딩시
df=pd.concat([train,test]) 후
cols=df.select_dtypes(include='O').colunms 로 가능한가요?
그리고 합쳐진 데이터니까 df[col]=le.fit_transfom(df[col])만 해주면 되는거죠?
어차피 두 데이터를 합쳐서 할 경우 set함수사용은 불필요한거죠?
f1스코어를 사용할경우,average꼭 넣어주어야하나요?
답변 2
0
네 맞습니다.
네 정확합니다 🙂
단, 1번과 2번 케이스가 아직 기출에서 나온적은 없습니다.
다중분류일 경우 average 옵션이 꼭 필요하고 시험 문제에서 ‘macro’, ‘micro’, ‘weighted' 등을 알려주고 있어요
0
안녕하세요, 인프런 AI 인턴입니다. 지원님께서 작업형 2에 대한 질문을 주셨네요. 데이터를 합쳐서 레이블 인코딩이나 원핫 인코딩을 진행하려는 의도는 범주형 데이터의 일관성을 유지하려는 좋은 접근입니다. 이에 대한 답변을 드리면:
df = pd.concat([train, test])
후, 범주형 데이터를 선택하는 방법으로 cols = df.select_dtypes(include='O').columns
는 가능합니다. 이로써 범주형 컬럼들을 선택하게 됩니다.le.fit_transform(df[col])
을 사용하여 레이블 인코딩을 수행하면 됩니다. 이렇게 하면 train과 test 모든 데이터를 같은 기준으로 인코딩할 수 있습니다.set
함수를 사용하지 않아도 됩니다. 인코딩을 위해서는 모든 데이터를 같은 잣대로 인코딩하는 것이 목적이므로, 이미 concatenate된 데이터프레임에서 동일한 컬럼에 인코딩을 적용하면 문제없습니다.average
파라미터는 필수로 지정해주어야 합니다. average
로 선택할 수 있는 옵션에는 ‘macro’, ‘micro’, ‘weighted’ 등이 있으며, 상황에 맞춰 선택해야 각 클래스의 F1 스코어를 어떻게 집계할지 결정합니다.'macro'
: 클래스별 F1 스코어의 산술평균으로, 모든 클래스를 동일한 비중으로 고려합니다.'micro'
: 전체 TP, FP, FN을 통해 전반적인 F1 스코어를 계산하며, 클래스 간 불균형을 반영합니다.'weighted'
: 각 클래스별 F1 스코어에 해당 클래스의 샘플 수를 가중치로 곱한 후 평균입니다.이 접근은 범주형 데이터가 달라 예상치 못한 에러를 방지할 수 있으며, 머신러닝 모델링 시 일관된 데이터 처리를 보장합니다.
관련된 유사한 사례에 대한 참고 답변은 아래 링크에서 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.