示例#1
0
def run_experiment(query_class, function_pipeline, weights, label_coarse):
    evaluator = Evaluator(FEATURE_DATA_FILE, label_coarse=label_coarse)
    mapping = {
        item["label"]: item["label_coarse"]
        for item in evaluator.query_matcher.features_raw_init
    }

    all_data = evaluator.query_matcher.features_raw
    my_subset = [
        item for item in all_data if item["label"] == (
            mapping[query_class] if evaluator.label_coarse else query_class)
    ]
    k_all_db_results_cociwa = evaluator.perform_matching_on_subset_slow(
        my_subset, function_pipeline, weights, k_full_db_switch=True)
    k_all_db_results_cociwa = evaluator.metric_F1(k_all_db_results_cociwa,
                                                  evaluator.mesh_classes_count,
                                                  k=10,
                                                  use_class_k=True,
                                                  silent=True)

    k_all_db_results_cociwa[["matches_class"]] = [
        Counter(tuple(row[["matches_class"]][0]))
        for index, row in k_all_db_results_cociwa.iterrows()
    ]
    results = k_all_db_results_cociwa[["name", "class", "matches_class"]]
    results.head(10)
    my_result = evaluator.calc_weighted_metric(k_all_db_results_cociwa,
                                               "F1score", "F1")[1]
    return my_result
def run_experiment_single(query_mesh, function_pipeline, weights, label_coarse):
    evaluator = Evaluator(FEATURE_DATA_FILE, label_coarse=label_coarse)
    mapping = {item["label"]: item["label_coarse"] for item in evaluator.query_matcher.features_raw_init}

    all_data = evaluator.query_matcher.features_raw
    # print(evaluator.mesh_classes_count.keys())
    # print(evaluator.mesh_classes_count[evaluator.mesh_classes_count==10])
    my_subset = [item for item in all_data if item["name"] == query_mesh]
    k_all_db_results_cociwa = evaluator.perform_matching_on_subset_slow(my_subset, function_pipeline, weights, k_full_db_switch=True)
    k_all_db_results_cociwa = evaluator.metric_F1(k_all_db_results_cociwa, evaluator.mesh_classes_count, k=10, use_class_k=True)

    k_all_db_results_cociwa[["matches_class"]] = [Counter(tuple(row[["matches_class"]][0])) for index, row in k_all_db_results_cociwa.iterrows()]
    results = k_all_db_results_cociwa[["name", "class", "matches_class"]]
    # print(results.head(10))
    print("")
    results.head(10)
    print(evaluator.calc_weighted_metric(k_all_db_results_cociwa)[1])
    class_metric_means = pd.DataFrame(
        evaluator.mesh_classes_count.keys().sort_values().to_list(),
        columns=['class'])
    overall_metrics = []

    weights_best_all_features = ([1]) + ([1] * count_hists) + ([1.47] *
                                                               count_skeletons)
    function_pipeline_cowaeu = [cosine] + ([cityblock] * count_hists) + (
        [cityblock] * count_skeletons)

    k_all_db_results_cowaeu = evaluator.perform_matching_calculate_metrics(
        function_pipeline_cowaeu,
        weights_best_all_features,
        k_full_db_switch=True)
    k_all_db_results_cowaeu.to_json("trash/k_all_db_results_cocici_bw.json")
    k_all_db_results_cowaeu = pd.read_json(
        "trash/k_all_db_results_cocici_bw.json")

    k_all_db_results_cowaeu = evaluator.metric_F1(k_all_db_results_cowaeu,
                                                  evaluator.mesh_classes_count,
                                                  k=10,
                                                  use_class_k=False,
                                                  weightbool=True,
                                                  weight=0.25)
    cowaeu_classes_mean_F1, cowaeu_overall_F1 = evaluator.calc_weighted_metric(
        k_all_db_results_cowaeu, "F1score", "F1")
    class_metric_means["F1_cowaeu"] = cowaeu_classes_mean_F1
    overall_metrics.append(["F1_cowaeu", cowaeu_overall_F1])
    evaluator.plot_metric_class_aggregate(
        class_metric_means[["class", "F1_cowaeu"]], "F1_cowaeu", "F1Score")