Skip to content
Snippets Groups Projects
Commit 2d744645 authored by Jan Habscheid's avatar Jan Habscheid
Browse files

Added Error over R

parent ec4bc5a4
Branches
No related tags found
No related merge requests found
Showing
with 247 additions and 26 deletions
import numpy as np
import matplotlib.pyplot as plt
# from models.RegressionModels import RegressionModels
from models.LinearRegression import LinearRegressionModel
......@@ -25,41 +26,58 @@ for model_name in models:
# Search for the best number of POD modes concerning the rmse (root mean square error)
# R = np.linspace(1, 25, 25, dtype=int)
# R = np.linspace(1, 21, 21, dtype=int)
R = np.linspace(1, 21, 3, dtype=int)
R = np.linspace(1, 21, 21, dtype=int)
mae_velocity_best, mae_pressure_best = model.mae_test(model_velocity, model_pressure)
mape_velocity_best, mape_pressure_best = model.mape_test(model_velocity, model_pressure)
rmse_velocity_best, rmse_pressure_best = model.rmse_test(model_velocity, model_pressure)
max_error_velocity_best, max_error_pressure_best = model.max_error_test(model_velocity, model_pressure)
# mae_velocity_best, mae_pressure_best = model.mae_test(model_velocity, model_pressure)
# mape_velocity_best, mape_pressure_best = model.mape_test(model_velocity, model_pressure)
# rmse_velocity_best, rmse_pressure_best = model.rmse_test(model_velocity, model_pressure)
# max_error_velocity_best, max_error_pressure_best = model.max_error_test(model_velocity, model_pressure)
best_model_velocity, best_model_pressure = model_velocity, model_pressure
R_best = model.elbow_point(scaled=True)
L2_velocity_best, L2_pressure_best = model.relative_L2(model_velocity, model_pressure)
print(f'Finding the optimal number of nodes for model {model_name}')
print(f'Searching for best R in {R}')
L2_velocity_vec, L2_pressure_vec = [], []
for R_ in R:
print(f'Current R: {R_}')
X_r_velocity, X_r_pressure = model.POD(R_velocity=R_, R_pressure=R_)
model_velocity, model_pressure = model.train(X_r_velocity, X_r_pressure)
mae_velocity_, mae_pressure_ = model.mae_test(model_velocity, model_pressure)
mape_velocity_, mape_pressure_ = model.mape_test(model_velocity, model_pressure)
rmse_velocity_, rmse_pressure_ = model.rmse_test(model_velocity, model_pressure)
max_error_velocity_, max_error_pressure_ = model.max_error_test(model_velocity, model_pressure)
L2_velocity_, L2_pressure_ = model.relative_L2(model_velocity, model_pressure)
L2_velocity_vec.append(L2_velocity_)
L2_pressure_vec.append(L2_pressure_)
# mae_velocity_, mae_pressure_ = model.mae_test(model_velocity, model_pressure)
# mape_velocity_, mape_pressure_ = model.mape_test(model_velocity, model_pressure)
# rmse_velocity_, rmse_pressure_ = model.rmse_test(model_velocity, model_pressure)
# max_error_velocity_, max_error_pressure_ = model.max_error_test(model_velocity, model_pressure)
if rmse_velocity_ < rmse_velocity_best:
if L2_velocity_ < L2_velocity_best:
best_model_velocity = model_velocity
mae_velocity_best = mae_velocity_
mape_velocity_best = mape_velocity_
rmse_velocity_best = rmse_velocity_
max_error_velocity_best = max_error_velocity_
L2_velocity_best = L2_velocity_
L2_pressure_best = L2_pressure_
R_best = (R_, R_best[1])
if rmse_pressure_ < rmse_pressure_best:
if L2_pressure_ < L2_pressure_best:
best_model_pressure = model_pressure
mae_pressure_best = mae_pressure_
mape_pressure_best = mape_pressure_
rmse_pressure_best = rmse_pressure_
max_error_pressure_best = max_error_pressure_
L2_velocity_best = L2_velocity_
L2_pressure_best = L2_pressure_
R_best = (R_best[0], R_)
# if rmse_velocity_ < rmse_velocity_best:
# best_model_velocity = model_velocity
# mae_velocity_best = mae_velocity_
# mape_velocity_best = mape_velocity_
# rmse_velocity_best = rmse_velocity_
# max_error_velocity_best = max_error_velocity_
# R_best = (R_, R_best[1])
# if rmse_pressure_ < rmse_pressure_best:
# best_model_pressure = model_pressure
# mae_pressure_best = mae_pressure_
# mape_pressure_best = mape_pressure_
# rmse_pressure_best = rmse_pressure_
# max_error_pressure_best = max_error_pressure_
# R_best = (R_best[0], R_)
model.save_model(best_model_velocity, best_model_pressure, model_velocity_file=f'{model_name}/velocity_{R_best[0]}.pkl', model_pressure_file=f'{model_name}/pressure_{R_best[1]}.pkl')
model.save_model(best_model_velocity, best_model_pressure, model_velocity_file=f'{model_name}/velocity.pkl', model_pressure_file=f'{model_name}/pressure.pkl')
......@@ -68,13 +86,41 @@ for model_name in models:
print('---------------------------------')
print(f'Model: {model_name}')
print(f'\t \t\t Velocity \t Pressure')
print(f'MAE: \t\t\t {mae_velocity_best} \t {mae_pressure_best}')
print(f'MAPE: \t\t\t {mape_velocity_best} \t {mape_pressure_best}')
print(f'RMSE: \t\t\t {rmse_velocity_best} \t {rmse_pressure_best}')
print(f'max error: \t\t {max_error_velocity_best} \t {max_error_pressure_best}')
# print(f'MAE: \t\t\t {mae_velocity_best} \t {mae_pressure_best}')
# print(f'MAPE: \t\t\t {mape_velocity_best} \t {mape_pressure_best}')
# print(f'RMSE: \t\t\t {rmse_velocity_best} \t {rmse_pressure_best}')
# print(f'max error: \t\t {max_error_velocity_best} \t {max_error_pressure_best}')
print(f'$L_2$: \t\t\t {L2_velocity_best} \t {L2_pressure_best}')
print(f'Number of POD modes: \t {R_best[0]} \t {R_best[1]}')
print(f'Elbow point: \t\t {model.elbow_point(scaled=True)[0]} \t {model.elbow_point(scaled=True)[1]}')
print('---------------------------------')
print('\n \n')
np.savez(f'Results/{model_name}/OptimalSetup.npz', Elbow_points=np.array([model.elbow_point(scaled=True)[0], model.elbow_point(scaled=True)[1]]), R_best=R_best, mae_velocity_best=mae_velocity_best, mae_pressure_best=mae_pressure_best, mape_velocity_best=mape_velocity_best, mape_pressure_best=mape_pressure_best, rmse_velocity_best=rmse_velocity_best, rmse_pressure_best=rmse_pressure_best, max_error_velocity_best=max_error_velocity_best, max_error_pressure_best=max_error_pressure_best)
\ No newline at end of file
np.savez(f'Results/{model_name}/OptimalSetup.npz', Elbow_points=np.array([model.elbow_point(scaled=True)[0], model.elbow_point(scaled=True)[1]]), R_best=R_best, L2_velocity_vec=L2_velocity_vec, L2_pressure_vec=L2_pressure_vec, R=R)#mae_velocity_best=mae_velocity_best, mae_pressure_best=mae_pressure_best, mape_velocity_best=mape_velocity_best, mape_pressure_best=mape_pressure_best, rmse_velocity_best=rmse_velocity_best, rmse_pressure_best=rmse_pressure_best, max_error_velocity_best=max_error_velocity_best, max_error_pressure_best=max_error_pressure_best)
fig, axs = plt.subplots(nrows=1, ncols=2)
fig.suptitle(f'{model_name} - Error over number of POD modes')
axs[0].plot(R, L2_velocity_vec)
axs[0].set_title('u')
axs[0].set_xlabel('R')
axs[1].plot(R, L2_pressure_vec)
axs[1].set_title('p')
axs[1].set_xlabel('R')
fig.tight_layout()
fig.savefig(f'Results/{model_name}/Error_POD_Nodes.jpg')
fig, axs = plt.subplots(nrows=1, ncols=2)
fig.suptitle(f'{model_name} - Error over number of POD modes')
axs[0].semilogy(R, L2_velocity_vec)
axs[0].set_title('u')
axs[0].set_xlabel('R')
axs[1].semilogy(R, L2_pressure_vec)
axs[1].set_title('p')
axs[1].set_xlabel('R')
fig.tight_layout()
fig.savefig(f'Results/{model_name}/Error_POD_Nodes_semilogy.jpg')
%% Cell type:code id: tags:
``` python
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
```
%% Cell type:code id: tags:
``` python
from models.LinearRegression import LinearRegressionModel
from models.GaussianProcessRegressor import GaussianProcessRegressionModel
from models.RBFInterpolator import RadialBasisRegressionModel
```
%% Cell type:code id: tags:
``` python
mpl.rcParams['axes.grid'] = True
mpl.rcParams['axes.labelsize'] = 12
# mpl.rcParams['axes.linewidth'] = 2
mpl.rcParams['figure.labelsize'] = 'large'
mpl.rcParams['font.size'] = 12.0
mpl.rcParams['legend.fontsize'] = 'medium'
mpl.rcParams['legend.markerscale'] = 1.0
mpl.rcParams['lines.linewidth'] = 2#1.5
mpl.rcParams['lines.markersize'] = 6.0
# mpl.rcParams['savefig.directory'] = '../Figures'
savefig_directory = '../Figures/'
mpl.rcParams['savefig.format'] = 'pdf'
mpl.rcParams['xtick.labelsize'] = 12#'medium'
mpl.rcParams['ytick.labelsize'] = 12#'medium'
```
%% Cell type:code id: tags:
``` python
models = {
'linregMod': LinearRegressionModel(),
'gaussianProcessMod': GaussianProcessRegressionModel(),
'radialBasisMod': RadialBasisRegressionModel(),
}
```
%% Cell type:code id: tags:
``` python
R = np.linspace(1,21,21)
L2_velocity_vec = np.zeros((len(R), len(models)))
L2_pressure_vec = np.zeros((len(R), len(models)))
for i, model in enumerate(models):
data = np.load('Results/{}/OptimalSetup.npz'.format(model))
L2_velocity_vec[:, i] = data['L2_velocity_vec']
L2_pressure_vec[:, i] = data['L2_pressure_vec']
# data = np.load('Results/linregMod/OptimalSetup.npz')
# L2 = data['L2_velocity_vec']
# data.keys()
```
%% Cell type:code id: tags:
``` python
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(3.54*2, 3.54))
for i, model in enumerate(models):
axs[0].plot(R, L2_velocity_vec[:, i], label=model)
axs[1].plot(R, L2_pressure_vec[:, i])
axs[0].set_title('u')
axs[0].set_xlabel('R')
axs[1].set_title('p')
axs[1].set_xlabel('R')
fig.legend(loc='upper center', ncol=3, bbox_to_anchor=(0.53, 1.08))
fig.tight_layout()
fig.savefig(f'Results/Error_over_POD/AllModels_linear_scaling.jpg')
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(3.54*2, 3.54))
for i, model in enumerate(models):
axs[0].semilogy(R, L2_velocity_vec[:, i], label=model)
axs[1].semilogy(R, L2_pressure_vec[:, i])
axs[0].set_title('u')
axs[0].set_xlabel('R')
axs[1].set_title('p')
axs[1].set_xlabel('R')
fig.legend(loc='upper center', ncol=3, bbox_to_anchor=(0.53, 1.08))
fig.tight_layout()
fig.savefig(f'Results/Error_over_POD/AllModels_semilogy_scaling.jpg')
```
%% Output
%% Cell type:code id: tags:
``` python
```
Results/Error_over_POD/AllModels_linear_scaling.jpg

28.1 KiB

Results/Error_over_POD/AllModels_semilogy_scaling.jpg

25 KiB

Results/gaussianProcessMod/Error_POD_Nodes.jpg

22.2 KiB

Results/gaussianProcessMod/Error_POD_Nodes_semilogy.jpg

22.2 KiB

No preview for this file type
Results/linregMod/Error_POD_Nodes.jpg

21.8 KiB

Results/linregMod/Error_POD_Nodes_semilogy.jpg

21.5 KiB

No preview for this file type
Results/radialBasisMod/Error_POD_Nodes.jpg

23.5 KiB

Results/radialBasisMod/Error_POD_Nodes_semilogy.jpg

20.9 KiB

No preview for this file type
......@@ -148,4 +148,20 @@ class RegressionModels:
return self.calculate_error_samples(max_error, predict_velocity, predict_pressure)
# def max_percentage_error_test(self, model_velocity, model_pressure, axis='full'):
# return
\ No newline at end of file
# return
def relative_L2(self, model_velocity, model_pressure):
predict_velocity, predict_pressure = self.predict_test(model_velocity, model_pressure, rescale=True)
# ord = None -> 2-norm (default)
n_samples = predict_velocity.shape[1]
L2_velocity, L2_pressure = 0, 0
for i in range(n_samples):
# Add relative error per sample
L2_velocity += np.linalg.norm(self.velocity_matrix_test[:,i] - predict_velocity[:,i]) / np.linalg.norm(self.velocity_matrix_test[:,i])
L2_pressure += np.linalg.norm(self.pressure_matrix_test[:,i] - predict_pressure[:,i]) / np.linalg.norm(self.pressure_matrix_test[:,i])
# Take the mean of the errors
L2_velocity /= n_samples
L2_pressure /= n_samples
return L2_velocity, L2_pressure
# return np.linalg.norm(self.velocity_matrix_test - predict_velocity) / np.linalg.norm(self.velocity_matrix_test), np.linalg.norm(self.pressure_matrix_test - predict_pressure) / np.linalg.norm(self.pressure_matrix_test)
\ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
File added
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment