Exemple #1
0
def train_predict():
    """Train and predict time series data"""

    # Load command line arguments
    train_file = sys.argv[1]
    parameter_file = sys.argv[2]

    # Load training parameters
    params = json.loads(open(parameter_file).read())

    # Load time series dataset, and split it into train and test
    x_train, y_train, x_test, y_test, x_test_raw, y_test_raw,\
     last_window_raw, last_window = data_helper.load_timeseries(train_file, params)

    # Build RNN (LSTM) model
    lstm_layer = [1, params['window_size'], params['hidden_unit'], 1]
    model = build_model.rnn_lstm(lstm_layer, params)

    # Train RNN (LSTM) model with train set
    model.fit(x_train,
              y_train,
              batch_size=params['batch_size'],
              epochs=params['epochs'],
              validation_split=params['validation_split'])

    # Check the model against test set
    predicted = build_model.predict_next_timestamp(model, x_test)
    predicted_raw = []
    for i in range(len(x_test_raw)):
        predicted_raw.append((predicted[i] + 1) * x_test_raw[i][0])

    # Plot graph: predicted VS actual
    plt.subplot(111)
    plt.plot(predicted_raw, label='Actual')
    plt.plot(y_test_raw, label='Predicted')
    plt.legend()
    plt.show()

    # Predict next time stamp
    next_timestamp = build_model.predict_next_timestamp(model, last_window)
    next_timestamp_raw = (next_timestamp[0] + 1) * last_window_raw[0][0]
    print('The next time stamp forecasting is: {}'.format(next_timestamp_raw))
Exemple #2
0
def predict(data, model, number_of_predictions):
    parameter_file = 'training_config.json'

    params = json.loads(open(parameter_file).read())
    predicted_values = []
    for i in range(number_of_predictions):
        x_train, y_train, x_test, y_test, x_test_raw, y_test_raw, last_window_raw, last_window = data_helper.load_timeseries(
            data, params)
        next_timestamp = model_helper.predict_next_timestamp(
            model, last_window)
        next_timestamp_raw = (next_timestamp[0] + 1) * last_window_raw[0][0]
        print('#{}#The next time stamp forecasting is: {}'.format(
            i + 1, next_timestamp_raw))
        predicted_values.append(next_timestamp_raw)
        np_pred = np.array([next_timestamp_raw])
        data = np.append(data, np_pred)
Exemple #3
0
def train(data, model_file, model_weights_file):
    parameter_file = 'training_config.json'

    params = json.loads(open(parameter_file).read())

    x_train, y_train, x_test, y_test, x_test_raw, y_test_raw, last_window_raw, last_window = data_helper.load_timeseries(
        data, params)

    model_file_path = Path(model_file)
    if model_file_path.is_file():
        print('Existing trained model found.')
        model = model_helper.load_model(model_file, model_weights_file)
    else:
        print('Creating a new model.')
        lstm_layer = [1, params['window_size'], params['hidden_unit'], 1]
        model = model_helper.rnn_lstm(lstm_layer, params)

    model.fit(x_train,
              y_train,
              batch_size=params['batch_size'],
              epochs=params['epochs'],
              validation_split=params['validation_split'],
              verbose=1)

    predicted = model_helper.predict_next_timestamp(model, x_test)
    predicted_raw = []
    for i in range(len(x_test_raw)):
        predicted_raw.append((predicted[i] + 1) * x_test_raw[i][0])

    # serialize model to JSON
    model_json = model.to_json()
    with open(model_file, 'w') as json_file:
        json_file.write(model_json)
    # serialize weights to HDF5
    model.save_weights(model_weights_file)
    print("Saved model to disk")
Exemple #4
0
def train_predict():
    """Train and predict time series data"""

    # Load command line arguments
    train_file = sys.argv[1]
    parameter_file = sys.argv[2]

    # Load training parameters
    params = json.loads(open(parameter_file).read())

    # print(params)
    # print('================')

    for q in range(29):
        params["window_size"] = q + 1

        # Load time series dataset, and split it into train and test
        x_train, y_train, x_test, y_test, x_test_raw, y_test_raw,\
         last_window_raw, last_window = data_helper.load_timeseries(train_file, params)

        # Build RNN (FFNN) model
        FFNN_layer = [1, params['window_size'], params['hidden_unit'], 1]
        print(FFNN_layer)
        print('================')
        model = build_model.rnn_FFNN(FFNN_layer, params)

        # Train RNN (FFNN) model with train set
        model.fit(x_train,
                  y_train,
                  batch_size=params['batch_size'],
                  epochs=params['epochs'],
                  validation_split=params['validation_split'])

        # Check the model against test set
        predicted = build_model.predict_next_timestamp(model, x_test)
        predicted_raw = []
        RMSE_result_raw = []
        for i in range(len(x_test_raw)):
            predicted_raw.append((predicted[i] + 1) * x_test_raw[i][0])
            RMSE_result_raw.append((y_test_raw[i] + 1) -
                                   (predicted_raw[i] + 1))

        #draw_xticks
        #data*0.2
        x = []
        my_xticks = []
        for o in range(10):
            x.append((4000 / 10) * (o + 1))
            my_xticks.append((2008 + o))

        # Plot graph: predicted VS actual
        plt.figure(facecolor='white')
        plt.subplot(111)
        plt.plot(predicted_raw, color='red', label='Actual')
        plt.plot(y_test_raw, color='blue', label='Predicted')
        plt.xticks(x, my_xticks)
        plt.title('predicted VS actual')
        #plt.show()
        plt.savefig("p-predicted/predicted-" + str(q + 1) + ".png")

        # print('================')
        # print(predicted_raw)
        # print(y_test_raw)
        # print(predicted_raw.shape)
        # print(y_test_raw.shape)

        MAPE = (sum((predicted_raw - y_test_raw) / len(predicted_raw)) *
                100) / len(predicted_raw)
        # print(MAPE)
        # np.savetxt('MAPE', MAPE)
        # print('================')

        # print(RMSE_result_raw)
        # print(predicted_raw)
        # print(y_test_raw)
        # print(type(RMSE_result_raw))
        # print(type(predicted_raw))
        # print(type(y_test_raw))
        #RMSE
        RMSE_result = np.sqrt(
            sum((predicted_raw - y_test_raw)**2) / len(predicted_raw))
        plt.figure(facecolor='white')
        plt.plot(RMSE_result_raw, color='blue', label='RMSE_result')
        # plt.plot(predicted_raw, color='red', label='predicted')
        # plt.plot(y_test_raw, color='green', label='Original')
        plt.ylabel('PM2.5-Value', fontsize=12)
        plt.xlabel('Year', fontsize=12)
        plt.xticks(x, my_xticks)
        plt.title('RMSE: %.4f' % RMSE_result)
        #plt.show()
        plt.savefig("p-RMSE/draw_RMSE-" + str(q + 1) + ".png")

        # Predict next time stamp
        next_timestamp = build_model.predict_next_timestamp(model, last_window)
        next_timestamp_raw = (next_timestamp[0] + 1) * last_window_raw[0][0]
        print('The next time stamp forecasting is: {}'.format(
            next_timestamp_raw))

        #print(RMSE_result)
        for i in range(15):
            # print(RMSE_result)
            # print(min_RMSE[i])
            if RMSE_result < min_RMSE_value[i]:
                min_RMSE[i] = q + 1
                min_RMSE_value[i] = RMSE_result
                min_next_temp[i] = next_timestamp_raw
                MAPE_value[i] = MAPE
                break
Exemple #5
0
def train_predict():
	"""Train and predict time series data"""

	# Load command line arguments 
	start_time = sys.argv[1]
	end_time = sys.argv[2]
	#filename = sys.argv[1]
	parameter_file = sys.argv[3]
	train_file=pd.DataFrame()
	train_file=data_processing.data_preprocessing(start_time,end_time)
	train_file.to_csv('out_temp1.csv' , index =False)
	x='out_temp1.csv'

	# Load training parameters
	params = json.loads(open(parameter_file).read())

	# Load time series dataset, and split it into train and test
	x_train, y_train, x_test, y_test, x_test_raw, y_test_raw,last_window_raw, last_window = data_helper.load_timeseries(x, params)

	# Build RNN (LSTM) model
	lstm_layer = [1, params['window_size'], params['hidden_unit'], 1]
	model = build_model.rnn_lstm(lstm_layer, params)
	
	# Train RNN (LSTM) model with train set
	model.fit(
		x_train,
		y_train,
		batch_size=params['batch_size'],
		epochs=params['epochs'],
		validation_split=params['validation_split'])

	# Check the model against test set
	predicted = build_model.predict_next_timestamp(model, x_test)        
	predicted_raw = []
	
	for i in range(len(x_test_raw)):
		predicted_raw.append((predicted[i] + 1) * x_test_raw[i][0])

	# Plot graph: predicted VS actual
	#plt.subplot(111)
	#plt.plot(predicted_raw, label='Actual')
	#plt.plot(y_test_raw, label='Predicted')	
	#plt.legend()
	#plt.show()
    #print(predicted_raw.dtype )
	# Predict next time stamp 
	np.savetxt("y_test_raw1.csv",y_test_raw,delimiter=',')
	np.savetxt("predicted_raw1.csv",predicted_raw,delimiter=',')
	data_new =[]
	for i in range(5) :
		next_timestamp = build_model.predict_next_timestamp(model, last_window)
		next_timestamp_raw = (next_timestamp[0] + 1) * last_window_raw[0][i]
		data_new.append(format(next_timestamp))
		print('The next time stamp forecasting is: {}'.format(next_timestamp_raw))
	plt.plot(data_new)
	plt.show()