diff --git a/code/bolsonaro/visualization/plotter.py b/code/bolsonaro/visualization/plotter.py index 9d7058732970fb5981ef04ce7a56e022ee68d5a9..d7ae5a84ec95d7f92b075b782890af2e0ccea50e 100644 --- a/code/bolsonaro/visualization/plotter.py +++ b/code/bolsonaro/visualization/plotter.py @@ -1,27 +1,25 @@ import matplotlib.pyplot as plt import numpy as np -from sklearn.neighbors.kde import KernelDensity +import pandas as pd class Plotter(object): @staticmethod - def weight_density(weights, X, file_path): - X_plot = [np.exp(elem) for elem in weights] + def weight_density(all_experiment_weights, file_path): + ''' + Function that creates the figure with the density of the weights + :param all_experiment_weights: The weights for the different experiments + :param file path: str, path where the figure will be saved + ''' fig, ax = plt.subplots() + for weights in all_experiment_weights.values(): + pd.Series([weight for weight in weights if weight != 0]).plot.kde(figsize=(15, 10), ax=ax) - for kernel in ['gaussian', 'tophat', 'epanechnikov']: - kde = KernelDensity(kernel=kernel, bandwidth=0.5).fit(X_plot) - log_dens = kde.score_samples(X_plot) - ax.plot(X_plot, np.exp(log_dens), '-', - label="kernel = '{0}'".format(kernel)) - - ax.legend(loc='upper left') - ax.plot(X[:, 0], -0.005 - 0.01 * np.random.random(X.shape[0]), '+k') - - ax.set_xlim(-4, 9) - ax.set_ylim(-0.02, 0.4) + legends = ['Experience ' + str(i+1) for i in range(len(all_experiment_weights))] + ax.legend(legends) fig.savefig(file_path, dpi=fig.dpi) + fig.title('Density weights of the OMP') plt.close(fig) @staticmethod diff --git a/code/compute_results.py b/code/compute_results.py index fb09e42d3fc6829358b622ad4291bd064a9c65a3..616a8d43f5a24ea4ec046407063f70b2b9a8dac8 100644 --- a/code/compute_results.py +++ b/code/compute_results.py @@ -59,6 +59,8 @@ if __name__ == "__main__": experiment_dev_scores = dict() experiment_test_scores = dict() + experiment_weights = dict() + # Used to check if all losses were computed using the same metric (it should be the case) experiment_score_metrics = list() @@ -74,6 +76,8 @@ if __name__ == "__main__": experiment_dev_scores[seed] = list() experiment_test_scores[seed] = list() + experiment_weights[seed] = list() + # List the forest sizes in models/{experiment_id}/seeds/{seed}/extracted_forest_size extracted_forest_sizes = os.listdir(extracted_forest_size_root_path) for extracted_forest_size in extracted_forest_sizes: @@ -84,9 +88,13 @@ if __name__ == "__main__": # Load [...]/model_parameters.json file and build the model using these parameters and the weights and forest from model_raw_results.pickle model = ModelFactory.load(dataset.task, extracted_forest_size_path, experiment_id, model_raw_results) # Save temporarly some raw results (TODO: to complete to retreive more results) + # Save the scores experiment_train_scores[seed].append(model_raw_results.train_score) experiment_dev_scores[seed].append(model_raw_results.dev_score) experiment_test_scores[seed].append(model_raw_results.test_score) + # Save the weights + experiment_weights[seed].append(model_raw_results.weights) + # Save the metric experiment_score_metrics.append(model_raw_results.score_metric) if len(set(experiment_score_metrics)) > 1: @@ -107,3 +115,10 @@ if __name__ == "__main__": all_labels=['train', 'dev', 'test'], title='Loss values of the trained model' ) + + # Plot the density of the weights + + Plotter.weight_density( + file_path=args.results_dir + os.sep + experiment_id + os.sep + 'density_weight.png', + all_experiment_weights=experiment_weights + ) diff --git a/requirements.txt b/requirements.txt index 437c0178801cca15b39561318f6e244c15b34533..e203595adf44b2ff9a37f4976276762e4a1c8130 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,5 @@ python-dotenv>=0.5.1 scikit-learn python-dotenv tqdm -matplotlib \ No newline at end of file +matplotlib +pandas \ No newline at end of file diff --git a/results/1/losses.png b/results/1/losses.png new file mode 100644 index 0000000000000000000000000000000000000000..37410fa731f7281d163ef9e0980f5fe76807e84a Binary files /dev/null and b/results/1/losses.png differ diff --git a/results/2/losses.png b/results/2/losses.png new file mode 100644 index 0000000000000000000000000000000000000000..4307ea87ef16a4b164f6eb7f7f450fd852231930 Binary files /dev/null and b/results/2/losses.png differ