def kuzushiji_f1()

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