我试图用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)
然而,由于去年比特币价格大幅上涨(正在测试数据集中),我的模型根本无法预测测试数据集。
(图片来自here)
我尝试了另外两种方式:
只需修复最高价格数据即可 我只修理了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美元怎么办?
按增加/减少率预测
data = data[1:] / data[:len(data) - 1]
我修改了上面的整个数据,以便数据类似(价格为 明天)/(今天的价格)。
这样,整个数据只在0.8~1.2之间,所以不需要任何数据 min-max scaling。
然而,由于训练不好,这种方法失败了。
有没有更好的方法解决这个问题?