Sklearn에서 분류 보고서를 해석하는 방법(예제 포함)
기계 학습에서 분류 모델을 사용할 때 세 가지 공통 측정항목을 사용하여 모델 품질을 평가합니다.
1. 정확도 : 전체 긍정적 예측 대비 올바른 긍정적 예측의 비율입니다.
2. 재현율(Recall) : 전체 실제 긍정 대비 올바른 긍정 예측의 비율입니다.
3. F1 점수 : 정밀도와 재현율의 가중 조화 평균입니다. 모델이 1에 가까울수록 더 좋은 모델입니다.
- F1 점수: 2* (정밀도 * 재현율) / (정밀도 + 재현율)
이 세 가지 지표를 사용하면 특정 분류 모델이 특정 응답 변수 에 대한 결과를 얼마나 잘 예측할 수 있는지 이해할 수 있습니다.
다행히 Python에서 분류 모델을 피팅할 때 sklearn 라이브러리의 classification_report() 함수를 사용하여 이러한 세 가지 측정항목을 생성할 수 있습니다.
다음 예에서는 이 기능을 실제로 사용하는 방법을 보여줍니다.
예: sklearn에서 분류 보고서를 사용하는 방법
이 예에서는 포인트와 어시스트를 사용하여 1,000명의 대학 농구 선수가 NBA에 드래프트될지 여부를 예측하는 로지스틱 회귀 모델을 적용합니다.
먼저 Python에서 로지스틱 회귀를 수행하는 데 필요한 패키지를 가져옵니다.
import pandas as pd import numpy as np from sklearn. model_selection import train_test_split from sklearn. linear_model import LogisticRegression from sklearn. metrics import classification_report
다음으로, 1000명의 농구 선수 정보를 포함하는 데이터 프레임을 생성하겠습니다.
#make this example reproducible
n.p. random . seeds (1)
#createDataFrame
df = pd. DataFrame ({' points ': np. random . randint (30, size=1000),
' assists ': np. random . randint (12, size=1000),
' drafted ': np. random . randint (2, size=1000)})
#view DataFrame
df. head ()
points assists drafted
0 5 1 1
1 11 8 0
2 12 4 1
3 8 7 0
4 9 0 0
참고 : 값이 0 이면 선수가 드래프트되지 않았음을 나타내고 값이 1 이면 선수가 드래프트되었음을 나타냅니다.
다음으로 데이터를 훈련 세트와 테스트 세트로 분할하고 로지스틱 회귀 모델을 피팅합니다.
#define the predictor variables and the response variable X = df[[' points ', ' assists ']] y = df[' drafted '] #split the dataset into training (70%) and testing (30%) sets X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.3,random_state=0) #instantiate the model logistic_regression = LogisticRegression() #fit the model using the training data logistic_regression. fit (X_train,y_train) #use model to make predictions on test data y_pred = logistic_regression. predict (X_test)
마지막으로 classification_report() 함수를 사용하여 모델의 분류 측정항목을 인쇄합니다.
#print classification report for model
print (classification_report(y_test, y_pred))
precision recall f1-score support
0 0.51 0.58 0.54 160
1 0.43 0.36 0.40 140
accuracy 0.48 300
macro avg 0.47 0.47 0.47 300
weighted avg 0.47 0.48 0.47 300
결과를 해석하는 방법은 다음과 같습니다.
설명 : 모델에서 자신이 드래프트될 것이라고 예측한 모든 선수 중 실제로는 43% 만이 드래프트되었습니다.
알림 : 실제로 드래프트된 모든 선수 중에서 모델은 그 중 36% 에 대해서만 이 결과를 정확하게 예측했습니다.
F1 점수 : 이 값은 다음과 같이 계산됩니다.
- F1 점수: 2* (정밀도 * 재현율) / (정밀도 + 재현율)
- F1 점수: 2*(.43*.36)/(.43+.36)
- F1 등급: 0.40 .
이 값은 1에 매우 가깝지 않기 때문에 모델이 선수가 드래프트될지 여부를 제대로 예측하지 못한다는 것을 알 수 있습니다.
지원 : 이 값은 단순히 테스트 데이터 세트의 각 클래스에 속한 플레이어 수를 알려줍니다. 테스트 데이터 세트의 플레이어 중 160명은 드래프트되지 않았고 140명은 드래프트 되었음을 알 수 있습니다.
참고 : classification_report() 함수에 대한 전체 문서는 여기에서 찾을 수 있습니다.
추가 리소스
다음 자습서에서는 Python에서 분류 모델을 사용하는 방법에 대한 추가 정보를 제공합니다.
Python에서 로지스틱 회귀를 수행하는 방법
Python에서 혼동 행렬을 만드는 방법
Python에서 균형 잡힌 정밀도를 계산하는 방법