From 0476edae8af9ac17738ad5653620f304fd6571c5 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Tue, 23 May 2023 13:44:00 +0200 Subject: [PATCH] Done part 4 --- evaluate_classifiers.py | 30 +++++++++++++++++++++++++++++- models/boxplot.png | Bin 0 -> 46443 bytes models/model_stats.csv | 24 ++++++++++++------------ requirements.txt | 3 ++- 4 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 models/boxplot.png diff --git a/evaluate_classifiers.py b/evaluate_classifiers.py index 69fc8ac..bedd127 100755 --- a/evaluate_classifiers.py +++ b/evaluate_classifiers.py @@ -6,6 +6,8 @@ import re import itertools import numpy as np from train_classifiers import perform_grid_search, load_dataset +import seaborn as sns +import matplotlib.pyplot as plt from sklearn.neural_network import MLPClassifier from sklearn.naive_bayes import GaussianNB @@ -131,8 +133,34 @@ def main(): i += 1 df_stats.to_csv(OUT_DIR + '/model_stats.csv') - print(df_stats) + + for metric in metric_list: + if metric == 'accuracy': + continue + + print(metric) + + dft = df_stats.loc[df_stats['metric'] == metric, :].copy() + dft.pvalue = dft.pvalue.apply(lambda x: '{0:.4g}'.format(round(x, 4))) + + dft = dft \ + .pivot(index=['classifier_a'], columns=['classifier_b'], values=['pvalue']) \ + .reset_index(drop=False) + dft.columns = sorted([x[1] for x in dft.columns]) + print(dft.replace({ np.nan: '--' }).to_markdown(index=False) + '\n') + + dfg = df.loc[df['metric'] != 'accuracy', :].sort_values(by=['classifier']) + # Order by metric list + dfg = pd.concat([dfg[dfg['metric'] == met] for met in metric_list if met != 'accuracy']) + + f, ax = plt.subplots(figsize=(8, 10)) + plt.yticks(np.arange(0.0, 1.0 + 1, 0.1)) + sns.boxplot(x="metric", y="value", hue="classifier", data=dfg, ax=ax) + ax.set(ylabel="Metric value", ylim=[0, 1], xlabel="Metric") + ax.set_title("Distribution of metrics for each classifier") + sns.despine(offset=10, trim=True) + f.savefig(OUT_DIR + '/boxplot.png') if __name__ == '__main__': diff --git a/models/boxplot.png b/models/boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2f59aeaa52a8d7d70c266e67f040a02a88657b GIT binary patch literal 46443 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