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는 쉬우니 패스