Skip to content
Snippets Groups Projects
Commit d45cbb42 authored by Charly Lamothe's avatar Charly Lamothe
Browse files

Merge branch '5-add-plots-2' into 'wip_clean_scripts'

Resolve "Add plots"

See merge request !5
parents d89d9d52 eefd7b6b
No related branches found
No related tags found
2 merge requests!5Resolve "Add plots",!3clean scripts
...@@ -370,3 +370,6 @@ TSWLatexianTemp* ...@@ -370,3 +370,6 @@ TSWLatexianTemp*
*.lpz *.lpz
reports/*.pdf reports/*.pdf
# Image
*.png
...@@ -30,6 +30,8 @@ class Trainer(object): ...@@ -30,6 +30,8 @@ class Trainer(object):
y_omp = y_forest y_omp = y_forest
self._logger.debug('Fitting both the forest and OMP on train+dev subsets.') self._logger.debug('Fitting both the forest and OMP on train+dev subsets.')
# TODO: add an option to train forest to train+dev and OMP to dev
model.fit( model.fit(
X_forest=X_forest, X_forest=X_forest,
y_forest=y_forest, y_forest=y_forest,
......
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
from sklearn.neighbors.kde import KernelDensity import pandas as pd
class Plotter(object): class Plotter(object):
@staticmethod @staticmethod
def weight_density(weights, X, file_path): def weight_density(all_experiment_weights, file_path):
X_plot = [np.exp(elem) for elem in weights] '''
fig, ax = plt.subplots() 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
'''
for kernel in ['gaussian', 'tophat', 'epanechnikov']: all_experiment_weights = np.array(list(all_experiment_weights.values()))
kde = KernelDensity(kernel=kernel, bandwidth=0.5).fit(X_plot) n = len(all_experiment_weights)
log_dens = kde.score_samples(X_plot) colors = Plotter.get_colors_from_cmap(n)
ax.plot(X_plot, np.exp(log_dens), '-',
label="kernel = '{0}'".format(kernel))
ax.legend(loc='upper left') fig, ax = plt.subplots()
ax.plot(X[:, 0], -0.005 - 0.01 * np.random.random(X.shape[0]), '+k') for i in range(n):
for weights in all_experiment_weights[i]:
pd.Series([weight for weight in weights if weight != 0]).plot.kde(
figsize=(15, 10), ax=ax, color=colors[i])
ax.set_xlim(-4, 9) ax.set_title('Density weights of the OMP')
ax.set_ylim(-0.02, 0.4)
fig.savefig(file_path, dpi=fig.dpi) fig.savefig(file_path, dpi=fig.dpi)
plt.close(fig) plt.close(fig)
......
...@@ -59,6 +59,8 @@ if __name__ == "__main__": ...@@ -59,6 +59,8 @@ if __name__ == "__main__":
experiment_dev_scores = dict() experiment_dev_scores = dict()
experiment_test_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) # Used to check if all losses were computed using the same metric (it should be the case)
experiment_score_metrics = list() experiment_score_metrics = list()
...@@ -74,6 +76,8 @@ if __name__ == "__main__": ...@@ -74,6 +76,8 @@ if __name__ == "__main__":
experiment_dev_scores[seed] = list() experiment_dev_scores[seed] = list()
experiment_test_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 # List the forest sizes in models/{experiment_id}/seeds/{seed}/extracted_forest_size
extracted_forest_sizes = os.listdir(extracted_forest_size_root_path) extracted_forest_sizes = os.listdir(extracted_forest_size_root_path)
for extracted_forest_size in extracted_forest_sizes: for extracted_forest_size in extracted_forest_sizes:
...@@ -84,9 +88,13 @@ if __name__ == "__main__": ...@@ -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 # 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) 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 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_train_scores[seed].append(model_raw_results.train_score)
experiment_dev_scores[seed].append(model_raw_results.dev_score) experiment_dev_scores[seed].append(model_raw_results.dev_score)
experiment_test_scores[seed].append(model_raw_results.test_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) experiment_score_metrics.append(model_raw_results.score_metric)
if len(set(experiment_score_metrics)) > 1: if len(set(experiment_score_metrics)) > 1:
...@@ -107,3 +115,9 @@ if __name__ == "__main__": ...@@ -107,3 +115,9 @@ if __name__ == "__main__":
all_labels=['train', 'dev', 'test'], all_labels=['train', 'dev', 'test'],
title='Loss values of the trained model' 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
)
...@@ -11,4 +11,5 @@ python-dotenv>=0.5.1 ...@@ -11,4 +11,5 @@ python-dotenv>=0.5.1
scikit-learn scikit-learn
python-dotenv python-dotenv
tqdm tqdm
matplotlib matplotlib
\ No newline at end of file pandas
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment