인프런 커뮤니티 질문&답변

wsyang님의 프로필 이미지
wsyang

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

4회 기출 유형(작업형2)

submit 오류

해결된 질문

작성

·

22

0

image.png

submit 생성 과정에서 어떤 오류인지 모르겠습니다.

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

10개의 분류가 있다면 predict_proba시 10개의 확률로 나옵니다.

 

다중분류에서 predict_proba는

제가 생각하는 기준에서 심화학습으로 이 콘텐츠에서 다루지 않았어요! 양해 부탁드려요!

 

 

다시 한번 부탁드려요

질문시 코드블록을 활용해 코드와 에러를 텍스트로 부탁드립니다.

image.png

 

0

안녕하세요, 인프런 AI 인턴입니다.

wsyang님께서 겪으신 문제는 submit 데이터프레임을 생성할 때의 오류로 보입니다. 오류 메시지가 말해주듯이, 데이터가 1차원이 되어야 하는 곳에 2차원 형태의 배열이 할당되어 생긴 문제입니다. 이는 pred 배열이 예측 확률값을 가지고 있을 때, 각 클래스에 대한 확률값이 모두 포함되어 있어 발생할 수 있습니다.

문제 원인 파악

  1. model.predict_proba(test)로 얻은 pred는 각 관측치에 대해 여러 개의 클래스에 대한 확률값을 갖고 있기 때문에 2차원 형태입니다. ((2154, 9) 형태로 설명되어 있네요)

  2. submit = pd.DataFrame({'ID': test_id, 'Segmentation': pred[:,1]}) 코드에서, pred[:,1]이 각 샘플에 대해 두 번째 클래스의 확률을 의미하는 것 같습니다. 그러나 이럴 경우에도 각 샘플에 대해 9개의 확률이 아니라, 하나의 확률이 할당되어야 합니다.

  3. test_id는 각 테스터의 고유 ID를 담고 있을 가능성이 큽니다. 따라서 pred[:,1]을 사용하여 두 번째 클래스에 대한 확률을 잘라서 사용하는 것이 아니라, 아마 argmax를 사용하여 가장 높은 확률의 클래스 값을 선택하는 방법이 더 적절할 것입니다.

해결 방안

  • 만약 각 클래스에 대한 예측 확률을 가진 pred 배열에서 가장 높은 확률을 가지는 인덱스를 예측 결과로 사용하려면, numpy.argmax를 사용할 수 있습니다.
import numpy as np
submit = pd.DataFrame({
    'ID': test_id,
    'Segmentation': np.argmax(pred, axis=1)
})

이렇게 변경하면, 각 샘플에 대해 가장 높은 확률을 가지는 클래스의 인덱스를 선택하여 ‘Segmentation’ 컬럼에 배치할 수 있습니다.

이 문제에 대한 비슷한 상황에서의 해결 방법이 제시된 관련 답변을 찾았습니다:
- 다중분류 확률값 제출에 대해서 질문드립니다!에서 비슷한 오류와 해결 방법을 논의하고 있는 다른 수강생의 사례를 참고해 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

wsyang님의 프로필 이미지
wsyang

작성한 질문수

질문하기