RNNs如何对测试CA的样本进行最小-最大缩放

2024-06-26 05:59:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过RNNs和Tensorflow来预测比特币的价格。你知道吗

我的模型是非常简单的RNNs和LSTM:

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个比特币价格数据。你知道吗

我将其拆分为训练数据集(旧数据)和测试数据集(新数据)。你知道吗

在训练之前,我尝试最小最大缩放,以便所有的训练数据都在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. 只需修正最高价格数据 我只确定最高价格,比如35000美元。你知道吗

    # 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)
    

    预测效果良好。不过,我觉得这是 相当不明智的方式-如果比特币上涨超过35000美元怎么办?

  2. 按增减率预测

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

    我修改了整个数据,如上述,以便数据将像(价格为 明天)/(今天的价格)。你知道吗

    这样,整个数据就在0.8~1.2之间,不需要任何数据 最小最大缩放。你知道吗

    然而,这种方法失败了,因为它没有得到很好的训练。

有没有更好的办法解决这个问题?你知道吗


Tags: 数据模型datatfnpcell价格abs