분류모델 평가지표 구하기

하는·2024년 3월 13일
0

ML

목록 보기
1/7

알고리즘 설명

p_score: label이 0일 확률.
1. p_score가 0.5보다 작으면(미만) 1, 크면 0으로 만드세요
2. numpy, pandas, sklearn을 활용하여 accuracy, precision, recall, f1, weighted-f1을 구하세요.
numpy결과, pandas 결과, sklearn 결과가 각각 나와야 합니다.
3. 지표 공식을 검색하는 것은 인정됩니다.
4. 라이브러리 기능을 찾는 것도 인정됩니다.
5. 누군가 만들어놓은 계산함수를 사용하는 것은 인정되지 않습니다.

import pandas as pd
def score(x):
    if x < 0.5:
        return 1
    else:
        return 0
        
df['p_score'] = df['p_score'].apply(lambda x:score(x))

# sklearn으로 구하기
from sklearn.metrics import *

print('accuracy :', accuracy_score(df['label'], df['p_score']))
print('recall :', recall_score(df['label'], df['p_score']))
print('precision :', precision_score(df['label'], df['p_score']))
print('f1 :', f1_score(df['label'], df['p_score']))
print('weighted f1 :', f1_score(df['label'], df['p_score'], average='weighted'))

# 출력: 
# accuracy : 0.75
# recall : 0.5
# precision : 1.0
# f1 : 0.6666666666666666
# weighted f1 : 0.7333333333333333


# numpy로 구하기
import numpy as np

np_label = np.array(df['label'])
np_pscore = np.array(df['p_score'])

accuracy = np.sum(model_correct == 1)/len(np_pscore)
prec = np.sum((model_correct == 1)&(np_pscore == 1))/np.sum(np_pscore == 1)
recall = np.sum((model_correct == 1)&(np_label == 1))/np.sum(np_label == 1)
f1 = 2*prec*recall/(prec+recall)

# 출력값
# accuracy: 0.75
# precision: 1.0
# recall: 0.5
# 클래스가 1개이므로 w_f1는 f1값과 같지 않나...?

# pandas는 쉬우니 패스
profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글