RNNs - 如何针对测试用例

时间:2018-02-17 02:39:41

标签: python tensorflow rnn

我试图用Tensorflow预测RNN的比特币价格。

我的模型是非常简单的带有LSTM的RNN:

cell = tf.contrib.rnn.BasicLSTMCell(num_units=num_hidden, state_is_tuple=True, activation=tf.tanh)
outputs, _ = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)
predict = tf.contrib.layers.fully_connected(outputs[:, -1], num_output,
                                            activation_fn=None)  # use last cell's output
cost = tf.reduce_sum(tf.square(predict - Y))  # MSE
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)'

我有35000小时的比特币价格数据。

我将其拆分为训练数据集(旧数据)和测试数据集(更新数据)。

在训练之前,我尝试了Min-Max Scaling,以便所有列车数据在0到1之间缩放。

# to avoid divide by zero, add noise
data = (data - np.min(np.abs(data), axis=0)) / (
            np.max(np.abs(data), axis=0) - np.min(np.abs(data), axis=0) + 1e-8)

然而,由于去年比特币价格大幅上涨(正在测试数据集中),我的模型根本无法预测测试数据集。

Sad prediction result. Image from here

(图片来自here

我尝试了另外两种方式:

  1. 只需修复最高价格数据即可 我只修理了35,000美元的最高价格。

    # to avoid divide by zero, add noise
    data = (data - np.min(np.abs(data), axis=0)) / (
                35000 - np.min(np.abs(data), axis=0) + 1e-8)
    

    效果很好,预测结果很好。但是,我觉得这是 非常不智能的方式 - 如果比特币超过35,000美元怎么办?

  2. 按增加/减少率预测

    data = data[1:] / data[:len(data) - 1]
    

    我修改了上面的整个数据,以便数据类似(价格为 明天)/(今天的价格)。

    这样,整个数据只在0.8~1.2之间,所以不需要任何数据 min-max scaling。

    然而,由于训练不好,这种方法失败了。

  3. 有没有更好的方法解决这个问题?

0 个答案:

没有答案