작성
·
25
답변 2
0
안녕하세요! 좋은 질문 감사합니다.
과거에는 대부분의 모델이 0, 1 같은 숫자 값만 다룰 수 있어서 문자형 레이블('>50K', '<=50K')을 숫자형으로 바꾸는 인코딩 작업이 필수였습니다.
지금도 그렇게 변환해서 사용하는 것이 깔끔하고 에러 방지에도 좋습니다. (xgboost 모델은 여전히 그렇구요)
하지만 요즘 모델(라이트지비엠, 랜덤포레스트)은 문자형 레이블도 자동으로 처리해주고 있어요!
초보자분들의 코드량을 줄이기 위해 replace() 인코딩 부분을 일부러 생략하고 설명드린 것인데요,이미 replace()를 사용해 변환하셨다면 실제 y_train 값이 숫자(0, 1)로 잘 바뀌어 있어야 합니다.
[심화]
레이블이 문자일 경우 0과 1로 변환하는 코드를 줄이는 대신
추후 평가 지표에 따라 어떤 것이 1 라벨(양성)인지 옵션을 추가해야 하는 번거로움이 생기기도 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Sungkyu Moon님.
질문에 대해 답변드리겠습니다. y_train
에서 ‘income’ 컬럼의 값을 ‘>50K’는 1로, ‘<=50K’는 0으로 인코딩하기 위해 replace()
메소드를 사용하셨습니다. 그런데 원하는 출력이 아닌 원래의 문자열이 그대로 나타난다면, 코드를 한번 더 확인해볼 필요가 있습니다.
아래는 올바른 실행을 위한 예시 코드입니다:
# income 컬럼을 기준으로 인코딩
y_train = x_train.pop('income').replace({'>50K': 1, '<=50K': 0})
이 코드는 ‘income’ 컬럼을 분리하여 DataFrame으로 저장한 후 replace()
메소드를 통해 값을 수치로 변환합니다.
변환이 되지 않았다면 replace()
가 적용된 결과가 y_train
에 제대로 할당되지 않았을 가능성이 있습니다. 코드를 다시 확인해보세요.
추가적으로, 유사한 질문과 해결 방법에 대한 논의는 다음 링크에서 확인하실 수 있습니다: y_tr 과 y_train 의 차이점. 이 링크에서는 컬럼 내 특정 값의 인코딩 과정에서 발생할 수 있는 혼란 및 해결 방법에 대한 자세한 설명을 제공하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그렇군요 빠르고 친절한 답변 감사합니다^^ Skip해서 넘어간 강의 화면이었군요~~ 알겠습니다~
한가지 질문이 하나 더 있습니다. 마지막 결과 제출부문에서 하기와 같이 코딩을 했습니다.
'id'와 'income'을 컬럼으로 표현을 하고 제출하는것으로 짰는데요 혹시 감점이 발생할 수 있을까요?
# pred = model_rfc.predict_proba(x_test_fin)[:,1]
# print(pred)
# pd.DataFrame({'ID' : x_test.id, 'income' : pred}).to_csv('result.csv', index=False)