From 74459fa82b6ed011ca3946eb2c5cfe89f146c673 Mon Sep 17 00:00:00 2001 From: Pat Alt <55311242+pat-alt@users.noreply.github.com> Date: Mon, 18 Sep 2023 14:41:48 +0200 Subject: [PATCH] best absolute outcome --- experiments/grid_search.jl | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/experiments/grid_search.jl b/experiments/grid_search.jl index 07c56e8c..bfb20a3f 100644 --- a/experiments/grid_search.jl +++ b/experiments/grid_search.jl @@ -71,7 +71,7 @@ function best_outcome(outcomes::Dict; generator=ECCCO_NAMES, measure=["distance_ for (params, outcome) in outcomes _ranks = generator_rank(outcome; generator=generator, measure=measure) |> x -> x.avg_rank |> - x -> sum(x) / length(x)[1] + x -> (sum(x) / length(x))[1] push!(ranks, _ranks) end best_index = argmin(ranks) @@ -84,4 +84,35 @@ end best_eccco(outcomes) = best_outcome(outcomes; generator=["ECCCo"], measure=["distance_from_energy", "distance_from_targets"]) -best_eccco_Δ(outcomes) = best_outcome(outcomes; generator=["ECCCo-Δ"], measure=["distance_from_energy", "distance_from_targets"]) \ No newline at end of file +best_eccco_Δ(outcomes) = best_outcome(outcomes; generator=["ECCCo-Δ"], measure=["distance_from_energy", "distance_from_targets"]) + +""" + best_absolute_outcome(outcomes; generator=ECCCO_NAMES, measure="distance_from_energy") + +Return the best outcome from grid search results. The best outcome is defined as the one with the lowest average value across all datasets and variables for the specified generator and measure. +""" +function best_absolute_outcome(outcomes::Dict; generator=ECCCO_NAMES, measure::String="distance_from_energy") + avg_values = [] + for (params, outcome) in outcomes + # Compute: + results = summarise_outcome(outcome, measure=[measure]) + # Adjust variables for which higher is better: + higher_is_better = [var ∈ ["validity", "redundancy"] for var in results.variable] + results.mean[higher_is_better] .= -results.mean[higher_is_better] + # Compute avergaes: + _avg_values = subset(results, :generator => ByRow(x -> x ∈ generator)) |> + x -> x.mean |> + x -> (sum(x)/length(x))[1] + push!(avg_values, _avg_values) + end + println(avg_values) + best_index = argmin(avg_values) + best_outcome = ( + params = collect(keys(outcomes))[best_index], + outcome = collect(values(outcomes))[best_index] + ) +end + +best_absolute_outcome_eccco(outcomes) = best_absolute_outcome(outcomes; generator=["ECCCo"], measure="distance_from_energy") + +best_absolute_outcome_eccco_Δ(outcomes) = best_absolute_outcome(outcomes; generator=["ECCCo-Δ"], measure="distance_from_energy") \ No newline at end of file -- GitLab