dimanche 24 septembre 2017

La prédiction avec le modèle et les paramètres d'entrainement

Attention: Ce code ne fonctionne pas dans le système d'exploitation CUI, ce qui signifie que vous ne pouvez pas exécuter ce programme avec une virtual box + vagrant (sans environnement GUI).
Avertissement: Ce code vise à partager publiquement des exemples de code. Nous déclinons toutes responsabilité en cas de perte fiancière.

Créer un dossier nommé "csv".

Dans le dossier "csv", mettre ces fichiers. Ceux-ci sont les données de prix de la bourse japonaise.
Télécharger les données: https://github.com/shunakanishi/japanese_stockprice

Maintenant, aller dans le premier répertoire et créer un fichier de python 3.

Préparer le modèle et les paramètres dans le dossier "model" -> "stockprice".

Dans le "model":

Dans le "stockprice":

Si vous n'avons pas le modèle et les paramètres, aller voir ce post et créer le modèle et les paramètres d'abord.

Insérer le code suivant dans le fichier "stockprice.py":
#-*- coding: utf-8 -*-
import numpy
import pandas
import matplotlib.pyplot as plt

from sklearn import preprocessing
from keras.models import Sequential
from keras.models import model_from_json
from keras.layers.core import Dense, Activation
from keras.layers.recurrent import LSTM
import keras.backend.tensorflow_backend as KTF
import os.path

class Prediction :

  def __init__(self):
    self.length_of_sequences = 10
    self.in_out_neurons = 1
    self.hidden_neurons = 300


  def load_data(self, data, n_prev=10):
    X, Y = [], []
    for i in range(len(data) - n_prev):
      X.append(data.iloc[i:(i+n_prev)].as_matrix())
      Y.append(data.iloc[i+n_prev].as_matrix())
    retX = numpy.array(X)
    retY = numpy.array(Y)
    return retX, retY


  def create_model(self, f_model, model_filename, weights_filename) :
    print(os.path.join(f_model,model_filename))
    if os.path.isfile(os.path.join(f_model,model_filename)):
      print('Saved parameters found. I will use this file...')
      json_string = open(os.path.join(f_model, model_filename)).read()
      model = model_from_json(json_string)
      model.summary()
      model.compile(loss="mape", optimizer="adam")
      model.load_weights(os.path.join(f_model,weights_filename))
    else:
      print('Saved parameters Not found. Please prepare model and parameters.')
      model = None
    return model

if __name__ == "__main__":

  f_log = './log'
  f_model = './model/stockprice'
  model_filename = 'stockprice_model.json'
  yaml_filename = 'stockprice_model.yaml'
  weights_filename = 'stockprice_model_weights.hdf5'

  prediction = Prediction()

  # Data
  data = None
  for year in range(2007, 2017):
    data_ = pandas.read_csv('csv/indices_I101_1d_' + str(year) +  '.csv')
    data = data_ if (data is None) else pandas.concat([data, data_])
  data.columns = ['date', 'open', 'high', 'low', 'close']
  data['date'] = pandas.to_datetime(data['date'], format='%Y-%m-%d')
  # Data of closing price
  data['close'] = preprocessing.scale(data['close'])
  data = data.sort_values(by='date')
  data = data.reset_index(drop=True)
  data = data.loc[:, ['date', 'close']]

  # 100% of the data is used as test data.
  # split_pos = int(len(data) * 0.8)
  # x_train, y_train = prediction.load_data(data[['close']].iloc[0:split_pos], prediction.length_of_sequences)
  x_test,  y_test  = prediction.load_data(data[['close']], prediction.length_of_sequences)

  old_session = KTF.get_session()

  model = prediction.create_model(f_model, model_filename, weights_filename)

  predicted = model.predict(x_test)
  result = pandas.DataFrame(predicted)
  result.columns = ['predict']
  result['actual'] = y_test
  result.plot()
  plt.show()

Et faire ce commande:
$ sudo python3 stockprice.py


100% des données sont utilisées pour le test.

Aucun commentaire:

Enregistrer un commentaire