plot.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib as mpl
  4. import matplotlib.pyplot as plt
  5. from math import sqrt
  6. from sklearn.metrics import mean_squared_error
  7. from sklearn.metrics import mean_absolute_error
  8. from data import create_time_steps
  9. def multi_step_plot(history, true_future, prediction, title, STEP):
  10. calibri = {'fontname':'Calibri'}
  11. plt.figure(figsize=(12, 6))
  12. num_in = create_time_steps(len(history))
  13. num_out = len(true_future)
  14. ##########################
  15. difference = []
  16. zip_object = zip(true_future, prediction)
  17. for true_future_i, prediction_i in zip_object:
  18. difference.append(true_future_i - prediction_i)
  19. difference_abs = [abs(ele) for ele in difference]
  20. me_diff = max(difference_abs) #me = "maximum error" = "Maximaler Einzelfehler" ???
  21. sd_diff = np.sqrt(np.mean(np.power(difference, 2))) #sd = "standard deviation" = "Standardabweichung"
  22. rmse = sqrt(mean_squared_error(true_future, prediction))
  23. mae = mean_absolute_error(true_future, prediction) #mae = "mean absolute error"
  24. ##########################
  25. plt.plot(num_in, np.array(history[:, 1]), label='History')
  26. plt.plot((np.arange(num_out) + 1)/STEP, np.array(true_future), 'bo', label='True Future')
  27. if prediction.any():
  28. plt.plot(np.arange(num_out) + 1/STEP, np.array(prediction), 'ro', label='Predicted Future')
  29. plt.legend(loc='upper left', fontsize=14)
  30. plt.xlabel('Time steps (h)', **calibri)
  31. plt.ylabel('Temperature (°C)', **calibri)
  32. plt.grid()
  33. plt.title(title, **calibri)
  34. mpl.rcParams.update({'font.size': 20})
  35. plt.show()
  36. print('RMSE: %.3f' % rmse)
  37. print('MAE: %.3f' % mae)
  38. print('ME: %.3f' % me_diff)
  39. print('SD: %.3f' % sd_diff)
  40. def plot_train_history(history, title):
  41. calibri = {'fontname':'Calibri'}
  42. loss = history.history['loss']
  43. val_loss = history.history['val_loss']
  44. epochs = range(len(loss))
  45. plt.figure(figsize=(12, 8))
  46. plt.plot(epochs, loss, 'b', label='Training loss')
  47. plt.plot(epochs, val_loss, 'r', label='Validation loss')
  48. plt.title(title, **calibri)
  49. plt.xlabel('Epochs', **calibri)
  50. plt.xticks([-1, 4, 9, 14, 19, 24, 29], [0, 5, 10, 15, 20, 25, 30])
  51. plt.ylabel('MSE loss', **calibri)
  52. plt.grid()
  53. plt.legend(fontsize=16)
  54. mpl.rcParams.update({'font.size': 20})
  55. plt.show()