You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

nn.py 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import numpy as np
  2. import tensorflow as tf
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. import wilshire
  6. import tensorflow_addons as tfa
  7. def snake(x):
  8. return(x+(tf.math.sin(50*x)**2)/50)
  9. def sinus(x):
  10. return(tf.math.sin(x))
  11. def sinus_cosinus(x):
  12. return(tf.math.sin(x)+tf.math.cos(x))
  13. def swish(x):
  14. return(x*tf.math.sigmoid(x))
  15. #activations = [tf.keras.activations.relu,swish,sinus_cosinus,sinus,snake]
  16. activations = [snake]
  17. models = []
  18. errors_train,errors_test = [],[]
  19. mean_y_train,mean_y_test,std_y_test=[],[],[]
  20. df_train,df_test = wilshire.preprocess('WILL5000INDFC2.csv')
  21. x_train = np.arange(df_train.shape[0])
  22. maximum = np.max(x_train)
  23. x_train = x_train / maximum
  24. y_train=df_train["WILL5000INDFC"]
  25. y_train.to_numpy()
  26. x_test = np.arange(df_train.shape[0]+1,df_train.shape[0]+df_test.shape[0]+1)
  27. y_test = df_test["WILL5000INDFC"]
  28. y_test.to_numpy()
  29. x_test=x_test / maximum
  30. for activation in activations :
  31. y_train_5=[]
  32. y_test_5=[]
  33. errors_train_5=[]
  34. errors_test_5=[]
  35. for k in range(1):
  36. model = tf.keras.Sequential()
  37. model.add(tf.keras.layers.Dense(1,input_shape=[1,],activation=activation))
  38. model.add(tf.keras.layers.Dense(64,activation=activation))
  39. model.add(tf.keras.layers.Dense(64,activation=activation))
  40. model.add(tf.keras.layers.Dense(1))
  41. opt = tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.9)
  42. model.compile(optimizer=opt, loss='mse')
  43. model.build()
  44. model.summary()
  45. model.fit(x_train,y_train, batch_size=2, epochs=20)
  46. y_pred_test = model.predict(x_test)
  47. y_pred_train = model.predict(x_train)
  48. y_train_5.append(y_pred_train)
  49. y_test_5.append(y_pred_test)
  50. errors_test_5.append(model.evaluate(x_test,y_test))
  51. errors_train_5.append(model.evaluate(x_train,y_train))
  52. mean_y_train.append(np.mean(y_train_5,axis=0))
  53. mean_y_test.append(np.mean(y_test_5,axis=0))
  54. std_y_test.append(np.std(y_test_5,axis=0))
  55. errors_train.append([np.mean(errors_train_5),np.std(errors_train_5)])
  56. errors_test.append([np.mean(errors_test_5),np.std(errors_test_5)])
  57. # y_preds_train.append(y_pred_train)
  58. # y_preds_test.append(y_pred_test)
  59. x = np.arange(df_train.shape[0]+df_test.shape[0]+908)
  60. x = x / maximum
  61. future_preds = model.predict(x) ## Calculated with a website the number of working days between 01-06-2020 and 01-01-2024
  62. def plot_total(x_train,y_train,y_pred_train,x_test,y_test,y_pred_test):
  63. x = np.concatenate((x_train,x_test))
  64. y_true = np.concatenate((y_train,y_test))
  65. y_pred = np.concatenate((y_pred_train,y_pred_test))
  66. plt.figure()
  67. plt.plot(x,y_true,label="True data")
  68. plt.plot(x,y_pred,label="Predictions")
  69. plt.vlines([5240,5326])
  70. plt.legend()
  71. plt.show()
  72. #plot_total(x_train,y_train,y_pred_train,x_test,y_test,y_pred_test)
  73. print(errors_test)
  74. x=np.arange(df_train.shape[0]+df_test.shape[0]+908)
  75. y_true = np.concatenate((y_train,y_test))
  76. x_cut = np.arange(df_train.shape[0]+df_test.shape[0])
  77. plt.figure()
  78. plt.plot(x_cut,y_true,label="True data")
  79. plt.plot(x,future_preds,label="Predictions")
  80. plt.vlines([5240,5326],ymin=0,ymax=1)
  81. plt.legend()
  82. plt.show()