in mlebench/competitions/kuzushiji-recognition/kuzushiji_metric.py [0:0]
def kuzushiji_f1(sub, solution):
"""
Calculates the competition metric.
Args:
sub: submissions, as a Pandas dataframe
solution: solution, as a Pandas dataframe
Returns:
f1 score
"""
if not all(sub["image_id"].values == solution["image_id"].values):
raise ValueError("Submission image id codes don't match solution")
pool = multiprocessing.Pool()
results = pool.starmap(score_page, zip(sub["labels"].values, solution["labels"].values))
pool.close()
pool.join()
tp = sum([x["tp"] for x in results])
fp = sum([x["fp"] for x in results])
fn = sum([x["fn"] for x in results])
if (tp + fp) == 0 or (tp + fn) == 0:
return 0
precision = tp / (tp + fp)
recall = tp / (tp + fn)
if precision > 0 and recall > 0:
f1 = (2 * precision * recall) / (precision + recall)
else:
f1 = 0
return f1