인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

정구님의 프로필 이미지
정구

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

섹션3

작성

·

106

0

from sklearn.metrics import precision_recall_curve

# 실제값 데이터 셋과 레이블 값이 1일 때의 예측 확률을 precision_recall_curve 인자로 입력

precisions, recalls, thresholds = precision_recall_curve(y_test, pred_proba_class1 )

print('반환된 분류 결정 임곗값 배열의 Shape:', thresholds.shape)

print('반환된 precisions 배열의 Shape:', precisions.shape)

print('반환된 recalls 배열의 Shape:', recalls.shape)

print('thresholds 5 sample:', thresholds[:5])

print('precisions 5 sample:', precisions[:5])

print('recalls 5 sample:', recalls[:5])

 

precision_recall_curve 함수를 이용해 precisions, recalls, thresholds 값을 반환받는 과정입니다.

  1. 여기서 thresholds의 개수가 precisions, recalls보다 1개 더 적게 나오는 이유가 궁금합니다.

  2. 위에서 개수 차이로 인해 thresholds값에 따른 precisions, recalls값들이 대응되지 않는 위치에 존재하지 않나요?
    print('thresholds 5 sample:', thresholds[:5])

    print('precisions 5 sample:', precisions[1:6])

    print('recalls 5 sample:', recalls[1:6])
    이렇게 하는게 옳다 생각했는데 제 생각이 잘못되었는지 궁금합니다.

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

아래 인프런 AI 인턴이 잘 답해줬군요.

precision_recall_curve에서 precision과 recall은 threshold보다 1개가 더 있습니다. precision의 경우 마지막 원소가 1, recall의 경우 마지막 원소가 0 입니다. 

아래 API 설명을 참조하시면 좋을 것 같습니다. 

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_curve.html

요약하자면 맨 마지막 precision과 recall에 대응 되는 threshold가 없으며, 이는 그래프를 그릴 때 y축 시작 지점으로 간주한다는 의미 입니다.

감사합니다. 

 

0

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

정구님께서 질문하신 “precision_recall_curve 함수를 이용해 반환받는 값”에 대한 궁금증에 답변드리겠습니다.

  1. thresholds의 개수가 precisions, recalls보다 1개 적게 나오는 이유: 이 부분에 대한 궁금증은 threshold 질문드립니다. 질문에서 다루어졌습니다. 간단히 요약하자면, precision_recall_curve 함수에서 반환되는 precisionsrecalls 가치는 thresholds보다 1개 더 많은 이유는 precisions 배열의 마지막 원소가 1이고, recalls 배열의 마지막 원소가 0이기 때문입니다. 이는 함수가 작동하는 방식의 일부로, 이렇게 설정된 추가적인 값들은 모델의 성능 평가 시 좀 더 연속적이고 완전한 곡선을 생성하기 위한 목적으로 제공됩니다.

  2. thresholds값에 따른 precisions, recalls값들의 대응 관곀: 정구님의 관찰처럼, thresholds의 각 값에 정확하게 대응되기 위해 precisionsrecalls의 값을 샘플링할 때 인덱스를 조정하는 것이 맞습니다. 이는 precision_recall_curve() 관련 질문드립니다.에서 언급된 내용과 일맥상통하며, thresholds의 각 값에 대해 대응되는 precisionsrecalls 값을 얻기 위해 인덱스를 조정하는 접근 방식이 적절합니다.

결론적으로, 정구님의 생각이 올바르며, 이는 precision_recall_curve 함수의 반환 값 사이에 존재하는 관계를 정확히 이해하는 데 도움이 됩니다.

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

정구님의 프로필 이미지
정구

작성한 질문수

질문하기