Scikit-learn 모델 평가

scikit-learnBeginner
지금 연습하기

소개

머신러닝 모델을 훈련한 후, 새로운 미지의 데이터에 얼마나 잘 일반화되는지 이해하기 위해 모델 성능을 평가하는 것이 중요합니다. 머신러닝을 위한 강력한 Python 라이브러리인 Scikit-learn 은 sklearn.metrics 모듈에 모델 평가를 위한 포괄적인 도구 세트를 제공합니다.

이 실습에서는 가장 일반적인 지표 중 일부를 사용하여 분류 모델을 평가하는 방법을 배우게 됩니다. 평가 과정에만 집중하기 위해 미리 정의된 실제 레이블 및 예측 레이블 세트를 사용할 것입니다. 다음을 계산하는 방법을 배우게 됩니다.

  • 정확도 점수 (Accuracy Score)
  • 혼동 행렬 (Confusion Matrix)
  • 정밀도 점수 (Precision Score)
  • 재현율 점수 (Recall Score)
  • F1 점수 (F1 Score)

이 실습이 끝나면 이러한 기본적인 Scikit-learn 함수를 능숙하게 사용하여 분류 모델의 성능을 평가할 수 있게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

sklearn.metrics 의 accuracy_score 를 사용하여 정확도 점수 계산

이 단계에서는 모델 예측의 정확도를 계산합니다. 정확도는 가장 직관적인 분류 지표 중 하나입니다. 전체 인스턴스 수에 대해 올바르게 예측된 인스턴스의 비율을 측정합니다.

sklearn.metricsaccuracy_score 함수는 이 값을 계산합니다. 실제 레이블과 예측된 레이블을 인수로 받습니다.

먼저 왼쪽 파일 탐색기에서 evaluate.py 파일을 엽니다. 이 파일에는 이미 y_truey_pred 목록이 포함되어 있습니다. 이제 accuracy_score 함수를 가져오고, 정확도를 계산하고, 결과를 출력하기 위해 파일 끝에 다음 코드를 추가합니다.

from sklearn.metrics import accuracy_score

## 정확도 계산
accuracy = accuracy_score(y_true, y_pred)

print(f"Accuracy: {accuracy}")

이제 전체 evaluate.py 파일은 다음과 같이 보일 것입니다.

## 이 실습에서는 다양한 평가 지표를 이해하기 위해 미리 정의된 실제 레이블 및 예측 레이블 세트를 사용합니다.

## y_true 는 데이터 포인트의 실제, 정답 레이블을 나타냅니다.
## 이진 분류의 경우, 0 은 '음성'을, 1 은 '양성'을 의미할 수 있습니다.
y_true = [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]

## y_pred 는 가상의 분류 모델이 예측한 레이블을 나타냅니다.
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]

print("Setup complete. True and predicted labels are defined in evaluate.py.")
print(f"True labels:    {y_true}")
print(f"Predicted labels: {y_pred}")

from sklearn.metrics import accuracy_score

## 정확도 계산
accuracy = accuracy_score(y_true, y_pred)

print(f"Accuracy: {accuracy}")

이제 스크립트를 실행해 보겠습니다. IDE 에서 터미널을 열고 다음 명령을 실행합니다.

python3 evaluate.py

정확도 점수를 포함한 다음 출력이 표시되어야 합니다. 정확도 0.8 은 예측의 80% 가 올바르게 이루어졌음을 의미합니다.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8

sklearn.metrics 의 confusion_matrix 를 사용하여 혼동 행렬 생성

이 단계에서는 혼동 행렬을 생성합니다. 정확도는 성능에 대한 빠른 요약을 제공하지만, 특히 불균형 데이터셋의 경우 오해의 소지가 있을 수 있습니다. 혼동 행렬은 각 클래스에 대한 올바른 예측 및 잘못된 예측 수를 보여줌으로써 분류기의 성능에 대한 더 자세한 분석을 제공합니다.

이 행렬은 예측된 값과 실제 값의 네 가지 조합으로 구성된 표입니다.

  • True Negatives (TN): 모델이 음성 클래스를 올바르게 예측했습니다.
  • False Positives (FP): 모델이 양성 클래스를 잘못 예측했습니다.
  • False Negatives (FN): 모델이 음성 클래스를 잘못 예측했습니다.
  • True Positives (TP): 모델이 양성 클래스를 올바르게 예측했습니다.

sklearn.metricsconfusion_matrix 함수를 사용합니다. evaluate.py 파일 끝에 다음 코드를 추가합니다.

from sklearn.metrics import confusion_matrix

## 혼동 행렬 생성
cm = confusion_matrix(y_true, y_pred)

print("Confusion Matrix:")
print(cm)

이제 터미널에서 스크립트를 다시 실행합니다.

python3 evaluate.py

출력에 이제 혼동 행렬이 포함됩니다.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]

이 행렬은 다음을 알려줍니다.

  • TN = 4 (좌측 상단)
  • FP = 1 (우측 상단)
  • FN = 1 (좌측 하단)
  • TP = 4 (우측 하단)

sklearn.metrics 의 precision_score 를 사용하여 정밀도 점수 계산

이 단계에서는 정밀도 점수를 계산합니다. 정밀도는 "모델이 양성으로 예측한 모든 인스턴스 중에서 실제로 양성이었던 비율은 얼마인가?"라는 질문에 답합니다. 이는 분류기의 정확성을 측정하는 지표입니다.

정밀도는 다음과 같이 계산됩니다: 정밀도 = True Positives / (True Positives + False Positives)

낮은 정밀도는 높은 수의 거짓 양성 (False Positives) 을 나타냅니다. sklearn.metricsprecision_score 함수를 사용합니다.

정밀도를 계산하고 출력하기 위해 evaluate.py 파일 끝에 다음 코드를 추가합니다.

from sklearn.metrics import precision_score

## 정밀도 계산
precision = precision_score(y_true, y_pred)

print(f"Precision: {precision}")

터미널에서 스크립트를 실행합니다.

python3 evaluate.py

출력에 정밀도 점수가 추가된 것을 볼 수 있습니다. 혼동 행렬 (TP=4, FP=1) 을 기반으로 정밀도는 4 / (4 + 1) = 0.8 입니다.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8

sklearn.metrics 의 recall_score 를 사용하여 재현율 점수 계산

이 단계에서는 재현율 점수를 계산합니다. 재현율은 민감도 또는 참 양성률 (True Positive Rate) 이라고도 하며, "실제 양성 인스턴스 중에서 모델이 올바르게 식별한 비율은 얼마인가?"라는 질문에 답합니다. 이는 분류기의 완전성을 측정하는 지표입니다.

재현율은 다음과 같이 계산됩니다: 재현율 = True Positives / (True Positives + False Negatives)

낮은 재현율은 높은 수의 거짓 음성 (False Negatives) 을 나타냅니다. sklearn.metricsrecall_score 함수를 사용합니다.

재현율을 계산하고 출력하기 위해 evaluate.py 파일 끝에 다음 코드를 추가합니다.

from sklearn.metrics import recall_score

## 재현율 계산
recall = recall_score(y_true, y_pred)

print(f"Recall: {recall}")

터미널에서 스크립트를 실행합니다.

python3 evaluate.py

출력에 이제 재현율 점수가 포함됩니다. 혼동 행렬 (TP=4, FN=1) 을 기반으로 재현율은 4 / (4 + 1) = 0.8 입니다.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8
Recall: 0.8

sklearn.metrics 의 f1_score 를 사용하여 F1 점수 계산

이 마지막 단계에서는 F1 점수를 계산합니다. F1 점수는 정밀도와 재현율의 조화 평균입니다. 두 지표 간의 균형을 찾으려고 합니다. 정밀도가 거짓 양성을 최소화하는 데 초점을 맞추고 재현율이 거짓 음성을 최소화하는 데 초점을 맞추는 반면, F1 점수는 두 가지를 모두 고려하는 단일 지표를 제공합니다.

F1 점수는 다음과 같이 계산됩니다: F1 Score = 2 * (Precision * Recall) / (Precision + Recall)

정밀도와 재현율 간의 균형이 필요하고 클래스 분포가 고르지 않을 때 특히 유용합니다. sklearn.metricsf1_score 함수를 사용합니다.

마지막 코드 조각을 evaluate.py 파일에 추가합니다.

from sklearn.metrics import f1_score

## F1 점수 계산
f1 = f1_score(y_true, y_pred)

print(f"F1 Score: {f1}")

마지막으로 터미널에서 스크립트를 실행합니다.

python3 evaluate.py

최종 출력에는 계산된 모든 지표가 표시됩니다. 정밀도와 재현율이 0.8 이면 F1 점수도 0.8 이 됩니다.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8
Recall: 0.8
F1 Score: 0.8

요약

실습을 완료하신 것을 축하드립니다! scikit-learn 라이브러리의 몇 가지 주요 지표를 사용하여 분류 모델을 평가하는 방법을 성공적으로 학습했습니다.

이 실습에서는 다음을 연습했습니다:

  • 모델 성능에 대한 전반적인 감을 잡기 위해 accuracy_score정확도 (accuracy) 계산하기
  • 참/거짓 양성 및 음성에 대한 자세한 보기를 얻기 위해 confusion_matrix혼동 행렬 (confusion matrix) 생성하기
  • 모델의 정확성을 측정하기 위해 precision_score정밀도 (precision) 계산하기
  • 모델의 완전성을 측정하기 위해 recall_score재현율 (recall) 계산하기
  • 정밀도와 재현율 간의 균형을 찾기 위해 f1_scoreF1 점수 (F1 score) 계산하기

이러한 지표는 모든 데이터 과학자 또는 머신러닝 엔지니어에게 기본적인 도구입니다. 이를 이해하면 모델의 강점과 약점을 더 잘 진단하고 특정 문제에 맞는 올바른 모델을 선택할 수 있습니다.