使用TensorFlow和Python进行价值预测

我有一个包含股票价格列表的数据集。我需要使用TensorFlow和Python来预测收盘价。

Q1: 我有以下代码,它使用前2000条记录作为训练数据,2001到20000条记录作为测试数据,但我不知道如何修改代码来预测今天和明天一天后的收盘价?请指教!

#!/usr/bin/env python2import numpy as npimport pandas as pdimport tensorflow as tfimport matplotlib.pyplot as pltdef feature_scaling(input_pd, scaling_meathod):    if scaling_meathod == 'z-score':       scaled_pd = (input_pd - input_pd.mean()) / input_pd.std()    elif scaling_meathod == 'min-max':       scaled_pd = (input_pd - input_pd.min()) / (input_pd.max() -     input_pd.min())    return scaled_pddef input_reshape(input_pd, start, end, batch_size, batch_shift, n_features):    temp_pd = input_pd[start-1: end+batch_size-1]    output_pd = map(lambda y : temp_pd[y:y+batch_size], xrange(0, end-start+1, batch_shift))    output_temp = map(lambda x : np.array(output_pd[x]).reshape([-1]), xrange(len(output_pd)))    output = np.reshape(output_temp, [-1, batch_size, n_features])    return outputdef target_reshape(input_pd, start, end, batch_size, batch_shift, n_step_ahead, m_steps_pred):    temp_pd = input_pd[start+batch_size+n_step_ahead-2: end+batch_size+n_step_ahead+m_steps_pred-2]    print temp_pd    output_pd = map(lambda y : temp_pd[y:y+m_steps_pred], xrange(0, end-start+1, batch_shift))    output_temp = map(lambda x : np.array(output_pd[x]).reshape([-1]), xrange(len(output_pd)))    output = np.reshape(output_temp, [-1,1])    return outputdef lstm(input, n_inputs, n_steps, n_of_layers, scope_name):     num_layers = n_of_layers    input = tf.transpose(input,[1, 0, 2])    input = tf.reshape(input,[-1, n_inputs])      input = tf.split(0, n_steps, input)    with tf.variable_scope(scope_name):    cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=n_inputs)     cell = tf.nn.rnn_cell.MultiRNNCell([cell]*num_layers)    output, state = tf.nn.rnn(cell, input, dtype=tf.float32)    yi1    output = output[-1]     return output        feature_to_input = ['open price', 'highest price', 'lowest price', 'close price','turnover', 'volume','mean price']    feature_to_predict = ['close price']    feature_to_scale = ['volume']    sacling_meathod = 'min-max'    train_start = 1     train_end = 1000    test_start = 1001    test_end = 20000    batch_size = 100    batch_shift = 1    n_step_ahead = 1    m_steps_pred = 1    n_features = len(feature_to_input)    lstm_scope_name = 'lstm_prediction'    n_lstm_layers = 1    n_pred_class = 1    learning_rate = 0.1    EPOCHS = 1000    PRINT_STEP = 100    read_data_pd = pd.read_csv('./stock_price.csv')    temp_pd = feature_scaling(input_pd[feature_to_scale],sacling_meathod)    input_pd[feature_to_scale] = temp_pd    train_input_temp_pd = input_pd[feature_to_input]    train_input_nparr = input_reshape(train_input_temp_pd,     train_start, train_end, batch_size, batch_shift, n_features)    train_target_temp_pd = input_pd[feature_to_predict]    train_target_nparr = target_reshape(train_target_temp_pd, train_start, train_end, batch_size, batch_shift, n_step_ahead, m_steps_pred)    test_input_temp_pd = input_pd[feature_to_input]    test_input_nparr = input_reshape(test_input_temp_pd, test_start, test_end, batch_size, batch_shift, n_features)    test_target_temp_pd = input_pd[feature_to_predict]    test_target_nparr = target_reshape(test_target_temp_pd, test_start, test_end, batch_size, batch_shift, n_step_ahead, m_steps_pred)    tf.reset_default_graph()    x_ = tf.placeholder(tf.float32, [None, batch_size, n_features])    y_ = tf.placeholder(tf.float32, [None, 1])    lstm_output = lstm(x_, n_features, batch_size, n_lstm_layers, lstm_scope_name)    W = tf.Variable(tf.random_normal([n_features, n_pred_class]))                                                                                                        b = tf.Variable(tf.random_normal([n_pred_class]))    y = tf.matmul(lstm_output, W) + b    cost_func = tf.reduce_mean(tf.square(y - y_))    train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost_func)    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)    init = tf.initialize_all_variables()            with tf.Session() as sess:        sess.run(init)        for ii in range(EPOCHS):            sess.run(train_op, feed_dict={x_:train_input_nparr, y_:train_target_nparr})            if ii % PRINT_STEP == 0:               cost = sess.run(cost_func, feed_dict={x_:train_input_nparr, y_:train_target_nparr})               print 'iteration =', ii, 'training cost:', cost

回答:

Q-1 : 你应该修改LSTM参数,使其返回一个包含两个值的序列,分别预测当天和次日的收盘价。

Q-2 很明显,你的模型存在欠拟合问题,这从你10%的训练数据和90%的测试数据中可以明显看出!你应该使用更平衡的比例,如之前的回答中所建议的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注