mirror of
https://github.com/Doctorado-ML/benchmark.git
synced 2025-08-17 16:35:54 +00:00
Enhance list with sort key and summary
This commit is contained in:
@@ -700,14 +700,22 @@ class Summary:
|
|||||||
self.datasets[result] = report.lines
|
self.datasets[result] = report.lines
|
||||||
self.data.append(entry)
|
self.data.append(entry)
|
||||||
|
|
||||||
def list_results(self, score=None, model=None) -> None:
|
def list_results(
|
||||||
|
self, score=None, model=None, input_data=None, sort_key="date"
|
||||||
|
) -> None:
|
||||||
"""Print the list of results"""
|
"""Print the list of results"""
|
||||||
data = self.data.copy()
|
data = self.data.copy() if input_data is None else input_data
|
||||||
if score:
|
if score:
|
||||||
data = [x for x in data if x["score"] == score]
|
data = [x for x in data if x["score"] == score]
|
||||||
if model:
|
if model:
|
||||||
data = [x for x in data if x["model"] == model]
|
data = [x for x in data if x["model"] == model]
|
||||||
data = sorted(data, key=lambda x: x["date"], reverse=True)
|
data = sorted(
|
||||||
|
data,
|
||||||
|
key=lambda x: 0.0
|
||||||
|
if type(x[sort_key]) is float and math.isnan(x[sort_key])
|
||||||
|
else x[sort_key],
|
||||||
|
reverse=True,
|
||||||
|
)
|
||||||
max_file = max(len(x["file"]) for x in data)
|
max_file = max(len(x["file"]) for x in data)
|
||||||
max_title = max(len(x["title"]) for x in data)
|
max_title = max(len(x["title"]) for x in data)
|
||||||
print(TextColor.LINE1, end="")
|
print(TextColor.LINE1, end="")
|
||||||
@@ -776,9 +784,7 @@ class Summary:
|
|||||||
print("*" + whites(length - 2))
|
print("*" + whites(length - 2))
|
||||||
print("*" * length)
|
print("*" * length)
|
||||||
|
|
||||||
def best_result(
|
def best_results(self, criterion=None, value=None, score="accuracy", n=10):
|
||||||
self, criterion=None, value=None, score="accuracy"
|
|
||||||
) -> dict:
|
|
||||||
# First filter the same score results (accuracy, f1, ...)
|
# First filter the same score results (accuracy, f1, ...)
|
||||||
haystack = [x for x in self.data if x["score"] == score]
|
haystack = [x for x in self.data if x["score"] == score]
|
||||||
haystack = (
|
haystack = (
|
||||||
@@ -791,11 +797,16 @@ class Summary:
|
|||||||
haystack,
|
haystack,
|
||||||
key=lambda x: -1.0 if math.isnan(x["metric"]) else x["metric"],
|
key=lambda x: -1.0 if math.isnan(x["metric"]) else x["metric"],
|
||||||
reverse=True,
|
reverse=True,
|
||||||
)[0]
|
)[:n]
|
||||||
if len(haystack) > 0
|
if len(haystack) > 0
|
||||||
else {}
|
else {}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def best_result(
|
||||||
|
self, criterion=None, value=None, score="accuracy"
|
||||||
|
) -> dict:
|
||||||
|
return self.best_results(criterion, value, score)[0]
|
||||||
|
|
||||||
def best_results_datasets(self, score="accuracy") -> dict:
|
def best_results_datasets(self, score="accuracy") -> dict:
|
||||||
"""Get the best results for each dataset"""
|
"""Get the best results for each dataset"""
|
||||||
dt = Datasets()
|
dt = Datasets()
|
||||||
@@ -814,3 +825,10 @@ class Summary:
|
|||||||
entry["title"],
|
entry["title"],
|
||||||
)
|
)
|
||||||
return best_results
|
return best_results
|
||||||
|
|
||||||
|
def show_top(self, score="accuracy", n=10):
|
||||||
|
self.list_results(
|
||||||
|
score=score,
|
||||||
|
input_data=self.best_results(score=score, n=n),
|
||||||
|
sort_key="metric",
|
||||||
|
)
|
||||||
|
14
src/list.py
14
src/list.py
@@ -29,13 +29,21 @@ def parse_arguments():
|
|||||||
required=False,
|
required=False,
|
||||||
help="model used in experiment",
|
help="model used in experiment",
|
||||||
)
|
)
|
||||||
|
ap.add_argument(
|
||||||
|
"-k",
|
||||||
|
"--key",
|
||||||
|
type=str,
|
||||||
|
required=False,
|
||||||
|
default="date",
|
||||||
|
help="key to sort results",
|
||||||
|
)
|
||||||
args = ap.parse_args()
|
args = ap.parse_args()
|
||||||
|
|
||||||
return (args.excel, args.score, args.model)
|
return (args.excel, args.score, args.model, args.key)
|
||||||
|
|
||||||
|
|
||||||
(excel, score, model) = parse_arguments()
|
(excel, score, model, key) = parse_arguments()
|
||||||
|
|
||||||
data = Summary()
|
data = Summary()
|
||||||
data.acquire()
|
data.acquire()
|
||||||
data.list_results(score, model)
|
data.list_results(score=score, model=model, sort_key=key)
|
||||||
|
@@ -60,5 +60,6 @@ for metric in metrics:
|
|||||||
summary.show_result(
|
summary.show_result(
|
||||||
summary.best_result(score=metric), title=f"BEST RESULT of {metric}"
|
summary.best_result(score=metric), title=f"BEST RESULT of {metric}"
|
||||||
)
|
)
|
||||||
|
summary.show_top(score=metric, n=10)
|
||||||
if list_results:
|
if list_results:
|
||||||
summary.list_results()
|
summary.list_results()
|
||||||
|
Reference in New Issue
Block a user