You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
|
|
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
|
|
# Released under the modified BSD license. See COPYING.md for more details.
|
|
from typing import Dict
|
|
|
|
|
|
def classifier_evaluation_dict(
|
|
tp: int,
|
|
tn: int,
|
|
fp: int,
|
|
fn: int,
|
|
) -> Dict[str, float]:
|
|
p = tp + fn
|
|
n = fp + tn
|
|
d: Dict = {
|
|
"Predicted positive": fp + tp,
|
|
"Predicted negative": fn + tn,
|
|
"Condition positive": p,
|
|
"Condition negative": n,
|
|
"True positive": tp,
|
|
"True negative": tn,
|
|
"False positive": fp,
|
|
"False negative": fn,
|
|
"Accuracy": (tp + tn) / (p + n),
|
|
"F1 score": (2 * tp) / (2 * tp + fp + fn),
|
|
}
|
|
|
|
if p > 0:
|
|
d["Recall"] = tp / p
|
|
else:
|
|
d["Recall"] = 1.0
|
|
|
|
if tp + fp > 0:
|
|
d["Precision"] = tp / (tp + fp)
|
|
else:
|
|
d["Precision"] = 1.0
|
|
|
|
t = (p + n) / 100.0
|
|
d["Predicted positive (%)"] = d["Predicted positive"] / t
|
|
d["Predicted negative (%)"] = d["Predicted negative"] / t
|
|
d["Condition positive (%)"] = d["Condition positive"] / t
|
|
d["Condition negative (%)"] = d["Condition negative"] / t
|
|
d["True positive (%)"] = d["True positive"] / t
|
|
d["True negative (%)"] = d["True negative"] / t
|
|
d["False positive (%)"] = d["False positive"] / t
|
|
d["False negative (%)"] = d["False negative"] / t
|
|
return d
|