Просмотр исходного кода

Added several models and cleaned figures

Doriand
Doriand Petit 4 лет назад
Родитель
Сommit
b3324e7a2e
35 измененных файлов: 1399 добавлений и 6806 удалений
  1. Двоичные данные
      code/wilshire_5000/0.00890727061778307_100epochs_snake.png
  2. Двоичные данные
      code/wilshire_5000/100epochs_2runs_4batchsize.png
  3. Двоичные данные
      code/wilshire_5000/30aplot1.png
  4. Двоичные данные
      code/wilshire_5000/30aplot2.png
  5. 7
    0
      code/wilshire_5000/Snake100a/keras_metadata.pb
  6. Двоичные данные
      code/wilshire_5000/Snake100a/saved_model.pb
  7. Двоичные данные
      code/wilshire_5000/Snake100a/variables/variables.data-00000-of-00001
  8. Двоичные данные
      code/wilshire_5000/Snake100a/variables/variables.index
  9. 7
    0
      code/wilshire_5000/Snake10a/keras_metadata.pb
  10. Двоичные данные
      code/wilshire_5000/Snake10a/saved_model.pb
  11. Двоичные данные
      code/wilshire_5000/Snake10a/variables/variables.data-00000-of-00001
  12. Двоичные данные
      code/wilshire_5000/Snake10a/variables/variables.index
  13. 7
    0
      code/wilshire_5000/Snake1a/keras_metadata.pb
  14. Двоичные данные
      code/wilshire_5000/Snake1a/saved_model.pb
  15. Двоичные данные
      code/wilshire_5000/Snake1a/variables/variables.data-00000-of-00001
  16. Двоичные данные
      code/wilshire_5000/Snake1a/variables/variables.index
  17. 7
    0
      code/wilshire_5000/Snake20a/keras_metadata.pb
  18. Двоичные данные
      code/wilshire_5000/Snake20a/saved_model.pb
  19. Двоичные данные
      code/wilshire_5000/Snake20a/variables/variables.data-00000-of-00001
  20. Двоичные данные
      code/wilshire_5000/Snake20a/variables/variables.index
  21. 7
    0
      code/wilshire_5000/Snake30a/keras_metadata.pb
  22. Двоичные данные
      code/wilshire_5000/Snake30a/saved_model.pb
  23. Двоичные данные
      code/wilshire_5000/Snake30a/variables/variables.data-00000-of-00001
  24. Двоичные данные
      code/wilshire_5000/Snake30a/variables/variables.index
  25. 7
    0
      code/wilshire_5000/Snake50a/keras_metadata.pb
  26. Двоичные данные
      code/wilshire_5000/Snake50a/saved_model.pb
  27. Двоичные данные
      code/wilshire_5000/Snake50a/variables/variables.data-00000-of-00001
  28. Двоичные данные
      code/wilshire_5000/Snake50a/variables/variables.index
  29. 1305
    1
      code/wilshire_5000/WILL5000INDFC.csv
  30. 0
    6785
      code/wilshire_5000/WILL5000INDFC2.csv
  31. Двоичные данные
      code/wilshire_5000/a_plot.png
  32. Двоичные данные
      code/wilshire_5000/new_bs1_20ep_30a_001lr.png
  33. Двоичные данные
      code/wilshire_5000/new_bs1_20ep_50a_001lr.png
  34. 52
    14
      code/wilshire_5000/nn.py
  35. 0
    6
      code/wilshire_5000/wilshire.py

Двоичные данные
code/wilshire_5000/0.00890727061778307_100epochs_snake.png Просмотреть файл


Двоичные данные
code/wilshire_5000/100epochs_2runs_4batchsize.png Просмотреть файл


Двоичные данные
code/wilshire_5000/30aplot1.png Просмотреть файл


Двоичные данные
code/wilshire_5000/30aplot2.png Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake100a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake100a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake100a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake100a/variables/variables.index Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake10a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake10a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake10a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake10a/variables/variables.index Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake1a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake1a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake1a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake1a/variables/variables.index Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake20a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake20a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake20a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake20a/variables/variables.index Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake30a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake30a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake30a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake30a/variables/variables.index Просмотреть файл


+ 7
- 0
code/wilshire_5000/Snake50a/keras_metadata.pb
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake50a/saved_model.pb Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake50a/variables/variables.data-00000-of-00001 Просмотреть файл


Двоичные данные
code/wilshire_5000/Snake50a/variables/variables.index Просмотреть файл


+ 1305
- 1
code/wilshire_5000/WILL5000INDFC.csv
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 0
- 6785
code/wilshire_5000/WILL5000INDFC2.csv
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
code/wilshire_5000/a_plot.png Просмотреть файл


Двоичные данные
code/wilshire_5000/new_bs1_20ep_30a_001lr.png Просмотреть файл


Двоичные данные
code/wilshire_5000/new_bs1_20ep_50a_001lr.png Просмотреть файл


+ 52
- 14
code/wilshire_5000/nn.py Просмотреть файл

@@ -7,7 +7,7 @@ import tensorflow_addons as tfa
from statsmodels.tsa.arima.model import ARIMA

def snake(x):
return(x+(tf.math.sin(50*x)**2)/50)
return(x+(tf.math.sin(20*x)**2)/20)
def sinus(x):
return(tf.math.sin(x))
def sinus_cosinus(x):
@@ -20,7 +20,7 @@ def swish(x):
activations = [snake]


def prepare_data(filename="WILL5000INDFC2.csv"):
def prepare_data(filename="WILL5000INDFC.csv"):
df_train,df_test,index = wilshire.preprocess(filename)
x_train = np.arange(df_train.shape[0])
maximum = np.max(x_train)
@@ -37,7 +37,8 @@ def prepare_data(filename="WILL5000INDFC2.csv"):
def arima_pred(y_train,y_test,orders=[[2,1,1],[2,2,1],[3,1,1],[2,1,2]],n=5):
mse=[]
for order in orders :
mean_err=np.array()
mean_err= []
for k in range(n):
train = y_train
preds = []
@@ -45,10 +46,11 @@ def arima_pred(y_train,y_test,orders=[[2,1,1],[2,2,1],[3,1,1],[2,1,2]],n=5):
model = ARIMA(train, order=(order[0],order[1],order[2]))
model = model.fit()
output = model.forecast()
preds.append(output[0])
#print(output)
preds.append(output)
#train.append(y_test[te
mean_err.append((np.square(np.array(preds) - np.array(y_test))).mean())
mse.append(mean_err.mean())
mse.append([np.array(mean_err).mean(),np.array(mean_err).std()])
return(mse)


@@ -60,7 +62,7 @@ def create_model(activation):
model.add(tf.keras.layers.Dense(64,activation=activation))
model.add(tf.keras.layers.Dense(1))

opt = tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.9)
opt = tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.8)
model.compile(optimizer=opt, loss='mse')
model.build()
model.summary()
@@ -78,8 +80,8 @@ def training_testing(n=5,activations = [tf.keras.activations.relu,swish,sinus_co
errors_test_5=[]
for k in range(n):

model = create_model(activations)
model.fit(x_train,y_train, batch_size=1, epochs=1)
model = create_model(activation)
model.fit(x_train,y_train, batch_size=1, epochs=50)

y_pred_test = model.predict(x_test)
y_pred_train = model.predict(x_train)
@@ -96,10 +98,10 @@ def training_testing(n=5,activations = [tf.keras.activations.relu,swish,sinus_co
errors_test.append([np.mean(errors_test_5),np.std(errors_test_5)])
# y_preds_train.append(y_pred_train)
# y_preds_test.append(y_pred_test)
return models,errors_train,errors_test
return models,errors_train,errors_test


def final_plot(models,errors_test,arima_err):
def final_plot(models,errors_test,arima_err,activations=["ReLU","Swish","Sinus Cosinus","Sinus","Snake"]):
x_train,x_test,y_train,y_test,maximum,index = prepare_data(filename="WILL5000INDFC2.csv")
x = np.arange(9000)
x_n = x / maximum
@@ -111,17 +113,17 @@ def final_plot(models,errors_test,arima_err):

print("----- ARIMA Test MSE -----")
orders_ARIMA = ["[2,1,1]","[2,2,1]","[3,1,1]","[2,1,2]"]
for k in range(len(orders_ARIMA)):
print("ARIMA"+orders_ARIMA[k]+" : "+str(arima_err[k]))
# for k in range(len(orders_ARIMA)):
# print("ARIMA"+orders_ARIMA[k]+" : "+str(arima_err[k]))
print("----- DNN Test MSE -----")
activations = ["ReLU","Swish","Sinus Cosinus","Sinus","Snake"]
for k in range(len(activations)):
print("DNN "+activations[k]+" : "+str(errors_test[k]))
plt.figure()
plt.plot(x_cut,y_true,label="True data")
plt.plot(x,future_preds,label="Predictions")
plt.xticks(range(0, 9000, 250), range(1995, 2031, 1))
plt.xticks(range(0, 9000, 500), range(1995, 2031, 2))
plt.xlabel("Années")
plt.ylabel("Index Willshire5000 normalisé")
plt.vlines([index,index+85],ymin=0,ymax=1,colors="r",label="Test Samples")
@@ -129,4 +131,40 @@ def final_plot(models,errors_test,arima_err):
plt.show()


x_train,x_test,y_train,y_test,maximum,index = prepare_data()
#mse = arima_pred(y_train,y_test)
# mse=[]
# # models,errors_train,errors_test = training_testing(n=1,activations=[snake])
# # models[0].save("Snake20a")
# models=[]
# errors_test=[]
# models.append(tf.keras.models.load_model("Snake30a"))
# print(mse,errors_test)
# final_plot(models,errors_test,mse,activations=[])

def plot_all_a(a=["1","10","20","30","100"]):
models=[]
for param in a :
models.append(tf.keras.models.load_model("Snake"+param+"a"))
x_train,x_test,y_train,y_test,maximum,index = prepare_data(filename="WILL5000INDFC2.csv")
x = np.arange(9000)
x_n = x / maximum
y_true = np.concatenate((y_train,y_test))
x_cut = np.arange(x_train.shape[0]+x_test.shape[0])
future_preds=[]
for k in range(len(models)):
future_preds.append(models[k].predict(x_n) )

plt.figure()
plt.plot(x_cut,y_true,label="True data")
for k in range(len(models)):
plt.plot(x,future_preds[k],label="a = "+a[k])
plt.xticks(range(0, 9000, 500), range(1995, 2031, 2))
plt.xlabel("Années")
plt.ylabel("Index Willshire5000 normalisé")
plt.legend()
plt.show()

# plot_all_a()

+ 0
- 6
code/wilshire_5000/wilshire.py Просмотреть файл

@@ -6,12 +6,9 @@ import matplotlib.pyplot as plt

def parser(path):
df = pd.read_csv(path,na_values='.')
print(df.shape)
#df = df.interpolate()
df = df.dropna().reset_index(drop=True)
print(df.shape)
#df = df.drop(labels=np.arange(1825)) ### To obtain the same graph than in the article
print(df.shape)
return(df)

def preprocess(path):
@@ -20,9 +17,6 @@ def preprocess(path):
df_normalized = df[:]
df_normalized["WILL5000INDFC"]=df_normalized["WILL5000INDFC"]/np.max(df_normalized["WILL5000INDFC"])
index_train = int(df_normalized[df_normalized["DATE"]=="2020-01-31"].index.array[0])
print(df)
print(df_normalized)
print(df_normalized[df_normalized["DATE"]=="2020-01-31"])
# df.plot()
# plt.show()
df_train = df_normalized[:index_train]

Загрузка…
Отмена
Сохранить