Machine Learning/scikit-learn
[μ΄μ§ λΆλ₯_μ±λ₯ νκ° μ§ν] F1 μ€μ½μ΄ / ROC곑μ
ISLA!
2023. 9. 28. 15:01
π F1 μ€μ½μ΄
- μ λ°λμ μ¬νμ¨μ κ²°ν©ν μ§ν
- μ λ°λμ μ¬νμ¨μ΄ μ΄λ νμͺ½μΌλ‘ μΉμ°μΉμ§ μλ μμΉλ₯Ό λνλΌλ μλμ μΌλ‘ λμ κ°μ κ°μ§ => μ°μν λͺ¨λΈ
- μ¬μ΄ν·λ°μ f1_score( ) API μ¬μ©
from sklearn.metrics import f1_score
f1 = f1_score(y_test, pred)
print('f1 μ€μ½μ΄:{0:.4f}'.format(f1))
f1 μ€μ½μ΄:0.7759
π ROC 곑μ
- ROC 곑μ κ³Ό μ΄μ κΈ°λ°ν AUC μ€μ½μ΄λ μ΄μ§ λΆλ₯μ μμΈ‘ μ±λ₯μμ μ€μνκ² μ¬μ©λλ μ§ν
- λΆλ₯μ μ±λ₯ μ§νλ‘ μ¬μ©λλ κ²μ AUC : AUC μ€μ½μ΄λ 곑μ λ°μ λ©΄μ μΌλ‘, 1μ κ°κΉμΈ μλ‘ μ’λ€
- μΌλ°μ μΌλ‘ ROC 곑μ μ체λ FPR, TPRμ λ³νκ°μ 보λ λ° μ΄μ©νλ©°, λΆλ₯μ μ±λ₯μ§νλ‘ μ¬μ©λλ κ²μ AUC κ°(λ©΄μ )
- μ¬μ΄ν·λ°μ roc_curve( ) μ¬μ© : λ°νκ°μ FPR, TPR, μκ³κ°
μ λ ₯ νλΌλ―Έν° | y_true : μ€μ ν΄λμ€ κ° array y_score : predict_proba()μ λ°νκ° arrayμμ positive μΉΌλΌμ μμΈ‘ νλ₯ μ΄ λ³΄ν΅ μ¬μ©λ¨ |
λ°ν κ° | fpr : fpr κ°μ array λ‘ λ°ν tpr : tpr κ°μ array λ‘ λ°ν thresholds: threshold κ° array |
from sklearn.metrics import roc_auc_score
# λ μ΄λΈ κ°μ΄ 1μΌ λμ μμΈ‘ νλ₯ μΆμΆ
pred_proba_class1 = lr_clf.predict_proba(X_test)[:, 1]
# roc μ»€λΈ λ°ν κ° νμΈ
fprs, tprs, thresholds = roc_curve(y_test, pred_proba_class1)
- AUC κ° νμΈ
from sklearn.metrics import roc_auc_score
# λ μ΄λΈ κ°μ΄ 1μΌ λμ μμΈ‘ νλ₯ μΆμΆ
pred_proba = lr_clf.predict_proba(X_test)[:, 1]
roc_score = roc_auc_score(y_test, pred_proba)
print('ROC AUC κ°: {0:.4f}'.format(roc_score))
ROC AUC κ°: 0.8980
β μ’ ν© ν¨μ : μ νλ, μ λ°λ, μ¬νμ¨, F1 μ€μ½μ΄, AUC ꡬνκΈ°
- μ΄μ κΉμ§ μμ±ν ν¨μμ ROC AUC λ μμΈ‘ νλ₯ κ°μ κΈ°λ°μΌλ‘ κ³μ°λλ―λ‘, ν¨μμ μΈμλ₯Ό λ³κ²½ν΄μ€
def get_clf_eval(y_test, pred=None, pred_proba=None):
confusion = confusion_matrix( y_test, pred)
accuracy = accuracy_score(y_test , pred)
precision = precision_score(y_test , pred)
recall = recall_score(y_test , pred)
f1 = f1_score(y_test,pred)
# ROC-AUC μΆκ°
roc_auc = roc_auc_score(y_test, pred_proba)
print('μ€μ°¨ νλ ¬')
print(confusion)
# ROC-AUC print μΆκ°
print('μ νλ: {0:.4f}, μ λ°λ: {1:.4f}, μ¬νμ¨: {2:.4f},\
F1: {3:.4f}, AUC:{4:.4f}'.format(accuracy, precision, recall, f1, roc_auc))
728x90