From 9aecdad66f156cf4134dc0a055e97f859a5216f5 Mon Sep 17 00:00:00 2001 From: Alejandro Moreo Date: Wed, 16 Oct 2024 17:44:59 +0200 Subject: [PATCH] improving plots debug --- KDEy/quantification_evaluation_debug.py | 73 ++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/KDEy/quantification_evaluation_debug.py b/KDEy/quantification_evaluation_debug.py index 073fe75..1f4f238 100644 --- a/KDEy/quantification_evaluation_debug.py +++ b/KDEy/quantification_evaluation_debug.py @@ -28,7 +28,7 @@ def plot(xaxis, metrics_measurements, metrics_names, suffix): fig, ax1 = plt.subplots(figsize=(8, 6)) def add_plot(ax, mean_error, std_error, name, color, marker): - ax.plot(xaxis, mean_error, label=name, marker=marker, color=color) + ax.plot(xaxis, mean_error, label=name, marker=marker, color=color, markersize=3) if std_error is not None: ax.fill_between(xaxis, mean_error - std_error, mean_error + std_error, color=color, alpha=0.2) @@ -74,6 +74,56 @@ def plot(xaxis, metrics_measurements, metrics_names, suffix): plt.close() +def plot_stack(xaxis, metrics_measurements, metrics_names, suffix): + + # Crear la figura y los ejes (4 bloques verticales) + fig, axs = plt.subplots(4, 1, figsize=(8, 12)) + + x = xaxis + + indexes = np.arange(len(metrics_measurements)) + axs_idx = 0 + # colors = ['b', 'g', 'r', 'c', 'purple'] + for m_te, m_tr in zip(indexes[:-1:2], indexes[1::2]): + metric_te, metric_tr = metrics_measurements[m_te], metrics_measurements[m_tr] + metric_te_name, metric_tr_name = metrics_names[m_te], metrics_names[m_tr] + + metric_mean_tr = np.mean(metric_tr, axis=0) + metric_std_tr = np.std(metric_tr, axis=0) + metric_mean_te = np.mean(metric_te, axis=0) + metric_std_te = np.std(metric_te, axis=0) + + axs[axs_idx].plot(xaxis, metric_mean_tr, label=metric_tr_name, marker='o', color='r', markersize=3) + axs[axs_idx].fill_between(xaxis, metric_mean_tr - metric_std_tr, metric_mean_tr + metric_std_tr, color='r', alpha=0.2) + minx = np.argmin(metric_mean_tr) + axs[axs_idx].axvline(xaxis[minx], color='r', linestyle='--', linewidth=1) + + axs[axs_idx].plot(xaxis, metric_mean_te, label=metric_te_name, marker='o', color='b', markersize=3) + axs[axs_idx].fill_between(xaxis, metric_mean_te - metric_std_te, metric_mean_te + metric_std_te, color='b', alpha=0.2) + minx = np.argmin(metric_mean_te) + axs[axs_idx].axvline(xaxis[minx], color='b', linestyle='--', linewidth=1) + + # axs[axs_idx].set_title(f'{metric_te_name} and {metric_tr_name}') + axs[axs_idx].legend(loc='lower right') + if axs_idx < len(indexes)//2 -1: + axs[axs_idx].set_xticks([]) + + axs_idx += 1 + + # Ajustar el espaciado entre los subplots + plt.tight_layout() + + # Mostrar el gráfico + + # Mostrar el gráfico + # plt.title(dataset) + # plt.show() + os.makedirs('./plots/likelihood/', exist_ok=True) + + plt.savefig(f'./plots/likelihood/{dataset}-fig{suffix}.png') + plt.close() + + def generate_data(from_train=False): data = qp.datasets.fetch_UCIMulticlassDataset(dataset) n_classes = data.n_classes @@ -110,7 +160,7 @@ def generate_data(from_train=False): likelihood_value = [] # for bandwidth in np.linspace(0.01, 0.2, 50): - for bandwidth in np.logspace(-5, np.log10(0.2), 50): + for bandwidth in np.logspace(-4, np.log10(0.2), 50): mix_densities = kde.get_mixture_components(tr_posteriors, tr_y, classes, bandwidth) test_densities = [kde.pdf(kde_i, te_posteriors) for kde_i in mix_densities] @@ -172,16 +222,24 @@ for i, dataset in enumerate(tqdm(DATASETS, desc='processing datasets', total=len measurement_names = [] if show_ae: measurements.append(AE_error_te) - measurement_names.append('AE') + measurement_names.append('AE(te)') + measurements.append(AE_error_tr) + measurement_names.append('AE(tr)') if show_rae: measurements.append(RAE_error_te) - measurement_names.append('RAE') + measurement_names.append('RAE(te)') + measurements.append(RAE_error_tr) + measurement_names.append('RAE(tr)') if show_kld: measurements.append(KLD_error_te) - measurement_names.append('KLD') + measurement_names.append('KLD(te)') + measurements.append(KLD_error_tr) + measurement_names.append('KLD(tr)') if show_mse: measurements.append(MSE_error_te) - measurement_names.append('MSE') + measurement_names.append('MSE(te)') + measurements.append(MSE_error_tr) + measurement_names.append('MSE(tr)') measurements.append(normalize_metric(LIKE_value_te)) measurements.append(normalize_metric(LIKE_value_tr)) measurement_names.append('NLL(te)') @@ -200,7 +258,8 @@ for i, dataset in enumerate(tqdm(DATASETS, desc='processing datasets', total=len # measurements.append(normalize_metric(LIKE_value_tr)) # measurement_names.append('NLL(te)') # measurement_names.append('NLL(tr)') - plot(xaxis, measurements, measurement_names, suffix='AVEtr') + # plot(xaxis, measurements, measurement_names, suffix='AVEtr') + plot_stack(xaxis, measurements, measurement_names, suffix='AVEtr')