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")