私はバイナリ分類の問題があり、データが不均衡なのでマクロ/マイクロF1を計算しようとしています。これはSickitlearnを使って行うことができますが、ドキュメントを確認した後にはhereと思われます。分類はバイナリですが、計算は陽性クラスのみになります。そのために私はそれを自分自身で計算しようとしています。 はスタートとして、私は次の関数を使用してTP、TN、FP、FNの計算:マクロとマイクロF1
def calculate(y_actual, y_pred):
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(len(y_pred)):
if y_actual[i]==y_pred[i]==1: # true positive
TP += 1
for i in range(len(y_pred)):
if y_actual[i]==1 and y_pred[i]==0:
FN += 1
for i in range(len(y_pred)):
if y_actual[i]==y_pred[i]==0: # true negative
TN += 1
for i in range(len(y_pred)):
if y_actual[i]==0 and y_pred[i]==1:
FP += 1
return(TP, FP, TN, FN)
だからミクロ/マクロF1を計算するために、私は(別途各クラスの精度と再現率を計算する必要があります!これは私が(私はそれを正しく理解している場合)方法がわからない)し、一例として、F1のマクロは、以下のように計算することができます。
F1 for class one: 2(precision*recall)/(precision+recall)
F1 for class two: 2(precision*recall)/(precision+recall)
F1 Macro = (F1 for class one + F1 for class two)/2
参照がF1Macro &マイクロを計算するためhereを見つけることができます
したがって、上記の関数(計算)に別々に与えられた各クラスについて、これらの尺度(TP/TN/FP/FN &精度、&リコール)を計算する方法はありますか? 助けていただければ幸いです。