logo

정밀도-재현율 곡선 | ML

분류기의 성능을 평가하는 방법에는 여러 가지가 있습니다. 이 기사에서는 Precision-Recall 곡선을 소개하고 널리 사용되는 두 가지 성능 보고 방법인 Precision-Recall(PR) 곡선과 ROC(수신기 작동 특성) 곡선. ROC 곡선은 이미 기사 . Precision-Recall 곡선이 무엇인지 간단히 알아보겠습니다.

정밀도와 재현율이란 무엇입니까?

정도

  • 정확하게 예측된 긍정적인 관찰과 모든 예측된 긍정적인 관찰의 비율을 정밀도라고 합니다.
  • 모델이 긍정적인 결과를 얼마나 잘 예측하는지 측정합니다.
  • 정밀도 공식은 다음과 같습니다.

Precision = frac{True Positives}{True Positives + False Positives}



  • 정밀도는 긍정적인 예측의 품질과 관련이 있습니다. 정밀도가 높다는 것은 모델의 오탐률이 낮다는 것을 나타냅니다.

상기하다

  • 실제 긍정적인 관찰의 총 수에 대한 올바르게 예측된 긍정적인 관찰의 비율을 재현율이라고 합니다.
  • 모델이 각 관련 사례를 얼마나 잘 포착할 수 있는지 측정합니다.
  • 재현율은 다음 공식을 사용하여 계산됩니다.

Precision = frac{True Positives}{True Positives + False Negatives}

  • 회상은 모델이 포착한 관련 사례의 수량과 관련이 있습니다. 높은 재현율은 모델의 거짓음성 비율이 낮다는 것을 나타냅니다.

경험적 해석 측면에서 4가지 필수 용어로 구성된 혼동 행렬은 정밀도와 재현율을 이해하는 데 가장 유용한 도구입니다.

  • 참양성(TP): 정확하게 식별된 양성 클래스 인스턴스의 수
  • 거짓 긍정(FP): 실수로 긍정 클래스 인스턴스로 식별된 부정 클래스 인스턴스의 수를 거짓 긍정(FP)이라고 합니다.
  • True Negative(TN): 정확하게 식별된 네거티브 클래스 인스턴스의 수
  • False Negative(FN): Negative 클래스 인스턴스(False Negative 또는 FN)로 잘못 분류된 Positive 클래스 인스턴스의 수입니다.

기계 학습의 정밀도-재현율(PR) 곡선

정도 의 비율이다 옳은 양성 분류(참양성)를 총 개수로 나눈 값 예측됨 만들어진 긍정적인 분류(참 긍정 + 거짓 긍정). 상기하다 의 비율이다 옳은 양성 분류(진양성)를 총 개수로 나눈 값 진심으로 긍정적인 분류(참 긍정 + 거짓 부정).



PR 곡선은 단순히 y축에 정밀도 값이 있고 x축에 재현율 값이 있는 그래프입니다. 즉, PR 곡선에는 다음이 포함됩니다.frac{TP}{TP+FP} y축에frac{TP}{TP+FN} x축에.

  • 정밀도는 PPV(긍정적 예측 값)라고도 합니다.
  • 재현율은 민감도, 적중률 또는 TPR(진양성률)이라고도 합니다.

아래 그림은 샘플 PR 및 ROC 곡선을 비교한 것입니다.

정밀도-재현율 곡선 해석

알고리즘은 높은 정밀도와 높은 재현율을 모두 갖추어야 합니다. 그러나 대부분의 기계 학습 알고리즘은 둘 사이의 절충안을 수반하는 경우가 많습니다. 좋은 PR 곡선은 AUC(곡선 아래 면적) . 위 그림에서 파란색 선에 해당하는 분류기가 녹색 선에 해당하는 분류기보다 성능이 더 좋습니다. AUC가 더 높은 분류기가 더 높다는 점에 유의하는 것이 중요합니다. ROC 곡선 PR 곡선에서도 항상 더 높은 AUC를 갖습니다. 문서가 스포츠 뉴스 카테고리에 속하는지 여부를 분류하는 알고리즘을 생각해 보세요. 다음과 같은 Ground Truth(실제) 및 분류기 출력 클래스 레이블이 있는 12개의 문서가 있다고 가정합니다.



문서 ID지상 진실분류기 출력
D1스포츠스포츠
D2스포츠스포츠
D3스포츠가 아님스포츠
D4스포츠스포츠가 아님
D5스포츠가 아님스포츠가 아님
D6스포츠스포츠가 아님
D7스포츠가 아님스포츠
D8스포츠가 아님스포츠가 아님
D9스포츠가 아님스포츠가 아님
D10스포츠스포츠
D11스포츠스포츠
D12스포츠스포츠가 아님

이제 TP, TN, FP, FN 값을 찾아보겠습니다.

분류 맥락에서 참양성(TP), 참음성(TN), 거짓양성(FP) 및 거짓음성(FN)의 정의를 더 잘 설명하기 위해 스포츠 또는 스포츠 아님으로 분류된 문서와 관련된 예를 사용하겠습니다.

참양성(TP): 정확하게 스포츠로 분류되어 있고 실제로는 스포츠에 관한 문서입니다. 이 시나리오의 문서 D1, D2, D10 및 D11은 TP의 인스턴스입니다.

참음성(TN): 트루네거티브는 스포츠와 관련이 없는 문서임에도 불구하고 스포츠 아님으로 적절하게 라벨이 지정된 경우입니다. 이 경우 TN은 문서 D5, D8 및 D9를 통해 입증됩니다.

거짓 긍정(FP): 스포츠와 관련이 없음에도 불구하고 스포츠로 잘못 분류된 문서입니다. 다음은 몇 가지 FP 예시, 문서 D3 및 D7입니다.

거짓 부정(FN): 스포츠가 아닌 것으로 잘못 표시되었지만 실제로는 스포츠에 관한 문서의 예입니다. 이 경우 문서 D4, D6 및 D12는 FN 예입니다.

다음 개수를 고려하면 다음과 같습니다. 도시 =4, 테네시 =3, FP =2, FN =3

마지막으로 정밀도와 재현율은 다음과 같이 계산됩니다.

Precision = frac{TP}{TP+FP} = frac{4}{6} = frac{2}{3}

Recall = frac{TP}{TP+FN} = frac{4}{7}

정밀도가 2/3일 때 재현율은 4/7이 됩니다. 다르게 말하면, 양성일 것으로 예상되는 모든 사례 중 2/3가 정확하게 분류되었으며(정밀도), 실제로 양성인 모든 사례 중에서 모델은 그 중 7분의 4를 포착할 수 있었습니다(재현율).

서로 다른 임계값을 설정하면 이러한 정밀도, 재현율 쌍을 여러 개 얻을 수 있습니다. 0에서 1 사이의 값으로 여러 개의 PR 쌍을 플롯하면 PR 곡선이 생성됩니다.

ROC 곡선이 존재할 때 PR 곡선이 필요합니까?

PR 곡선은 정보 검색 결과를 보고하는 데 특히 유용합니다.
정보 검색에는 특정 사용자 쿼리와 관련된 문서를 찾기 위해 문서 풀을 검색하는 작업이 포함됩니다. 예를 들어 사용자가 Pink Elephants라는 검색어를 입력했다고 가정해 보겠습니다. 검색 엔진은 몇 가지 최적화된 알고리즘을 사용하여 수백만 개의 문서를 훑어보고 소수의 관련 문서를 검색합니다. 따라서 우리는 아니오라고 안전하게 가정할 수 있습니다. 관련 서류가 1번에 비해 훨씬 적습니다. 관련없는 문서.

이 시나리오에서는

  • TP = 검색된 관련 문서 수(좋은 결과)
  • FP = 관련이 없는 검색된 문서 수(가짜 검색 결과)
  • TN = 관련이 없고 검색되지 않은 문서의 수입니다.
  • FN = 검색되지 않은 관련 문서 수(우리가 놓친 좋은 문서)

ROC 곡선은 Recall = TPR =을 포함하는 플롯입니다.frac{TP}{TP+FN}x축 및 FPR =frac{FP}{FP+TN}y축에서. 아니 이후. 참음성(즉, 검색되지 않고 관련성이 없는 문서)의 수가 너무 많아서 FPR은 미미하게 작아집니다.

또한 FPR은 검색되지 않은 문서가 아닌 검색된 문서에 더 집중하기를 원하기 때문에 검색 시스템을 제대로 평가하는 데 도움이 되지 않습니다. PR 곡선은 이 문제를 해결하는 데 도움이 됩니다. PR 곡선은 x축에 재현율(TPR) 값이 있고 정밀도 =frac{TP}{TP+FP}y축에서. 정밀도는 강조 표시에 도움이 됩니다. 검색된 결과가 얼마나 관련성이 있는지 , 이는 IR 시스템을 판단할 때 더 중요합니다. 따라서 PR 곡선은 정보 검색과 관련된 문제에서 더 일반적입니다.

ROC와 Precision-Recall 곡선을 언제 사용해야 합니까?

큰 괴조 (Receiver Operating Characteristic) 곡선은 클래스 분포가 균형을 이룰 때 적합하며, 거짓 긍정과 거짓 부정은 비슷한 결과를 갖습니다. 민감도와 특이도 사이의 균형을 묘사합니다. 이와 대조적으로, 불균형 데이터 세트를 처리할 때는 긍정적인 클래스 예측 성능에 중점을 두어 Precision-Recall 곡선이 더 좋습니다.

Precision-Recall은 긍정적인 사례를 올바르게 분류하는 모델의 능력에 대한 통찰력을 제공합니다. ROC와 Precision-Recall 중에서 선택하는 것은 문제의 특정 요구 사항에 따라 달라지며, 데이터 분포와 다양한 유형의 오류 결과를 이해하는 것이 중요하다는 점을 강조합니다.

정밀도-재현율 곡선을 위한 기본 코드 구현

필요한 라이브러리 가져오기

이 코드 줄은 Python 라이브러리 정밀도-재현율 곡선을 생성하는 데 필요한 모듈 사이키트 학습 결과를 시각화합니다. Matplotlib . Matplotlib는 널리 사용되는 Python 플로팅 라이브러리이며 pyplot은 다양한 유형의 플롯과 차트를 생성하기 위한 간단한 인터페이스를 제공합니다. 로지스틱 회귀 이진 및 다중 클래스 분류 작업에 널리 사용되는 분류 알고리즘입니다. 정밀도-재현율 곡선과 AUC는 널리 사용되는 평가 지표입니다. 이진 분류 특히 불균형 데이터 세트를 처리할 때 문제가 발생합니다.

파이썬3 import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import precision_recall_curve, auc>

사용된 데이터세트

이 코드는 sci-kit-learn의 'make_classification' 함수를 사용하여 이진 분류 문제에 대한 합성 데이터 세트를 생성합니다.

파이썬3 # Generate a synthetic dataset X, y = make_classification( n_samples=1000, n_features=20, n_classes=2, random_state=42)>

학습 및 테스트 분할

그만큼 train_test_split scikit-learn의 함수는 이 코드 조각에서 이전에 생성된 합성 데이터 세트(X 및 y)를 훈련 및 테스트 세트로 분할하는 데 사용됩니다. 이 분할은 기계 학습 모델을 평가하는 데 중요한 단계입니다. 모델은 X_test 및 y_test 데이터에서 테스트되기 전에 X_train 및 y_train 데이터에서 학습되어 보이지 않는 샘플에서 얼마나 잘 수행되는지 확인합니다. train_test_split 함수는 훈련 세트와 테스트 세트를 분리하여 모델 성능이 이전에 볼 수 없었던 새로운 데이터에 대한 일반화를 반영하도록 합니다.

파이썬3 # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42)>

모델 빌딩

여기서는 로지스틱 회귀를 사용하여 훈련 데이터 세트에 대한 모델을 훈련합니다. 이진 분류를 위한 널리 사용되는 알고리즘인 로지스틱 회귀는 sci-kit-learn 클래스 LogisticRegression에 의해 구현됩니다.

파이썬3 # Train a logistic regression model (you can replace this with your own classifier) model = LogisticRegression() model.fit(X_train, y_train)>

모델 예측

이러한 계산은 일반적으로 다양한 결정 임계값에 대한 정밀도 및 재현율 값을 제공하며, 이를 사용하여 정밀도-재현율 곡선을 그리거나 다양한 시점에서 정밀도 및 재현율의 상대적 중요성을 조사할 수 있습니다. 그리고 계산하면 곡선 아래 면적 (AUC) 정밀도-재현율 곡선.

파이썬3 # Predict probabilities for positive class y_scores = model.predict_proba(X_test)[:, 1] # Calculate precision and recall precision, recall, thresholds = precision_recall_curve(y_test, y_scores) # Calculate Area Under the Curve (AUC) for precision-recall curve auc_score = auc(recall, precision)>

PR 곡선 그리기

이 코드 블록은 정밀도-재현율 곡선을 시각화하기 위한 표준 방법을 제공하고 다양한 결정 임계값에서 정밀도와 재현율의 균형을 평가할 수 있게 해줍니다. 정밀도-재현율 곡선에 대한 모델의 전반적인 성능은 범례에 표시된 AUC 점수로 요약됩니다.

파이썬3 # Plot precision-recall curve plt.figure(figsize=(8, 6)) plt.plot(recall, precision, label=f'Precision-Recall Curve (AUC = {auc_score:.2f})') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.legend() plt.show()>

산출 :


정밀-리콜-곡선-Geeksforgeeks

정밀도-재현율 곡선


자주 묻는 질문(FAQ)

Q. 정밀이란 무엇인가요?

정확하게 예측된 긍정적인 관찰의 총 예측된 긍정적인 수에 대한 비율을 정밀도라고 합니다. 모델이 긍정적인 결과를 얼마나 잘 예측하는지 측정합니다. 다음은 정밀도 공식입니다.

Precision = frac{True Positives}{True Positives + False Positives}

Q. 리콜이란 무엇인가요?

재현율은 실제 긍정의 총 수에 대한 올바르게 예측된 긍정적 관찰의 비율입니다. 민감도 또는 참양성률이라고도 합니다. 모델이 각 관련 사례를 얼마나 잘 포착할 수 있는지 평가합니다. 재현율은 다음 공식을 사용하여 계산됩니다.

git pull 오리진 마스터

Precision = frac{True Positives}{True Positives + False Negatives}

Q. 정밀도와 재현율이 필요한 이유는 무엇인가요?

이진 및 다중 클래스 분류 문제에서 분류기의 성능을 평가하기 위해 정밀도와 재현율이라는 두 가지 평가 지표가 사용됩니다. 긍정적인 예측 정확도는 정밀도로 측정되고, 긍정적인 예측 완전성은 재현율로 측정됩니다.

Q. 재현율과 정밀도의 균형은 무엇입니까?

재현율과 정밀도는 종종 절충안이 됩니다. 정밀도가 높아지면 재현율이 저하될 수 있으며 그 반대의 경우도 마찬가지입니다. 긍정적인 사례를 식별하는 기준을 변경하면 이러한 균형을 관리할 수 있습니다. 반대로 임계값이 낮을수록 재현율은 낮아지지만 정밀도는 높아집니다. 재현율과 정밀도 사이의 결정은 주어진 문제의 세부 사항에 따라 결정됩니다.

Q. F1 점수란 무엇이며, 정밀도 및 재현율과 어떤 관련이 있나요?

재현율과 정밀도의 조화 평균을 F1 점수라고 합니다. 이는 거짓양성과 거짓음성을 모두 고려하는 공정한 측정을 제공합니다. F1 점수는 다음 공식을 사용하여 계산됩니다.

F1-Score = frac{2 imes Precision imes Recall}{Precision + Recall}

F1 점수는 정밀도와 재현율이 균형을 잃고 둘 사이의 균형이 필요할 때 특히 유용합니다.