분류기의 성능을 평가하는 방법에는 여러 가지가 있습니다. 이 기사에서는 Precision-Recall 곡선을 소개하고 널리 사용되는 두 가지 성능 보고 방법인 Precision-Recall(PR) 곡선과 ROC(수신기 작동 특성) 곡선. ROC 곡선은 이미 기사 . Precision-Recall 곡선이 무엇인지 간단히 알아보겠습니다.
정밀도와 재현율이란 무엇입니까?
정도
- 정확하게 예측된 긍정적인 관찰과 모든 예측된 긍정적인 관찰의 비율을 정밀도라고 합니다.
- 모델이 긍정적인 결과를 얼마나 잘 예측하는지 측정합니다.
- 정밀도 공식은 다음과 같습니다.
- 정밀도는 긍정적인 예측의 품질과 관련이 있습니다. 정밀도가 높다는 것은 모델의 오탐률이 낮다는 것을 나타냅니다.
상기하다
- 실제 긍정적인 관찰의 총 수에 대한 올바르게 예측된 긍정적인 관찰의 비율을 재현율이라고 합니다.
- 모델이 각 관련 사례를 얼마나 잘 포착할 수 있는지 측정합니다.
- 재현율은 다음 공식을 사용하여 계산됩니다.
- 회상은 모델이 포착한 관련 사례의 수량과 관련이 있습니다. 높은 재현율은 모델의 거짓음성 비율이 낮다는 것을 나타냅니다.
경험적 해석 측면에서 4가지 필수 용어로 구성된 혼동 행렬은 정밀도와 재현율을 이해하는 데 가장 유용한 도구입니다.
- 참양성(TP): 정확하게 식별된 양성 클래스 인스턴스의 수
- 거짓 긍정(FP): 실수로 긍정 클래스 인스턴스로 식별된 부정 클래스 인스턴스의 수를 거짓 긍정(FP)이라고 합니다.
- True Negative(TN): 정확하게 식별된 네거티브 클래스 인스턴스의 수
- False Negative(FN): Negative 클래스 인스턴스(False Negative 또는 FN)로 잘못 분류된 Positive 클래스 인스턴스의 수입니다.
기계 학습의 정밀도-재현율(PR) 곡선
정도 의 비율이다 옳은 양성 분류(참양성)를 총 개수로 나눈 값 예측됨 만들어진 긍정적인 분류(참 긍정 + 거짓 긍정). 상기하다 의 비율이다 옳은 양성 분류(진양성)를 총 개수로 나눈 값 진심으로 긍정적인 분류(참 긍정 + 거짓 부정).
PR 곡선은 단순히 y축에 정밀도 값이 있고 x축에 재현율 값이 있는 그래프입니다. 즉, PR 곡선에는 다음이 포함됩니다.
- 정밀도는 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 =을 포함하는 플롯입니다.
또한 FPR은 검색되지 않은 문서가 아닌 검색된 문서에 더 집중하기를 원하기 때문에 검색 시스템을 제대로 평가하는 데 도움이 되지 않습니다. PR 곡선은 이 문제를 해결하는 데 도움이 됩니다. PR 곡선은 x축에 재현율(TPR) 값이 있고 정밀도 =
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()>
산출 :

정밀도-재현율 곡선
자주 묻는 질문(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 점수는 정밀도와 재현율이 균형을 잃고 둘 사이의 균형이 필요할 때 특히 유용합니다.