我正在尝试在 python 中使用 TensorFlow,对加密货币数据进行一些预测。问题在于,预测的输出类似于 0.1-0.9 数字,而加密货币数据应该是 10000-10100 格式,并且我没有找到将 0.* 数字转换为真实数字的解决方案。
我尝试创建一个比率,其中 substrat max - min 来自预测值,max-min 来自测试数据,然后除以得到一个比率,但是当我将此比率与预测相乘时,错误率很高(找到了 14000 的数字而不是 10000 的数字)
这里有一些代码:
train_start = 0
train_end = int(np.floor(0.7*n))
test_start = train_end
test_end = n
data_train = data[np.arange(train_start, train_end), :]
data_test = data[np.arange(test_start, test_end), :]
Scale data:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_train = scaler.fit_transform(data_train)
data_test = scaler.transform(data_test)
Build X and y:
X_train = data_train[:, 1:]
y_train = data_train[:, 0]
X_test = data_test[:, 1:]
y_test = data_test[:, 0]
.
.
.
n_data = 10
n_neurons_1 = 1024
n_neurons_2 = 512
n_neurons_3 = 256
n_neurons_4 = 128
n_target = 1
X = tf.compat.v1.placeholder(dtype=tf.compat.v1.float32, shape=[None, n_data])
Y = tf.compat.v1.placeholder(dtype=tf.compat.v1.float32, shape=[None])
Hidden layer
..
Output layer (must be transposed)
..
Cost function
..
Optimizer
..
Make Session:
sess = tf.compat.v1.Session()
Run initializer:
sess.run(tf.compat.v1.global_variables_initializer())
Setup interactive plot:
plt.ion()
fig = plt.figure()
ax1 = fig.add_subplot(111)
line1, = ax1.plot(y_test)
line2, = ax1.plot(y_test*0.5)
plt.show()
epochs = 10
batch_size = 256
for e in range(epochs):
# Shuffle training data
shuffle_indices = np.random.permutation(np.arange(len(y_train)))
X_train = X_train[shuffle_indices]
y_train = y_train[shuffle_indices]
# Minibatch training
for i in range(0, len(y_train) // batch_size):
start = i * batch_size
batch_x = X_train[start:start + batch_size]
batch_y = y_train[start:start + batch_size]
# Run optimizer with batch
sess.run(opt, feed_dict={X: batch_x, Y: batch_y})
# Show progress
if np.mod(i, 5) == 0:
# Prediction
pred = sess.run(out, feed_dict={X: X_test})
#This pred var is the output of the prediction
我将结果保存在一个文件中,如下所示:
2019-08-21 06-AM;15310.444858356934;0.50021994;
2019年8月21日中午12点;14287.717187390663;0.46680558;
2019年8月21日下午6点;14104.63871795706;0.46082407;
例如,最后的预测是 0,46,但当我尝试转换它时,我发现 14104,而它应该更接近 10000 值
有人知道如何转换这些预测吗?
谢谢!
最佳答案
您必须使用 inverse_transform
MinMaxScaler
来转换回您获得的 0-1 范围内的输出。
您还没有给出您的模型,但我相信您正在利用具有很少密集层的回归任务。您必须不断减少损失。如果您使用均方误差,则损失越大,您的输出远离所需结果集的可能性就越大。
即使您的损失很小,并且结果对于训练样本来说很好,但预测对于测试数据集来说很糟糕,您可能必须考虑增加训练数据集,以便涵盖更多可能性。如果这不可能,请考虑减少神经网络中的神经元数量,以防止过度拟合。
您可以进行一些后处理,将输出限制在某个所需的范围内。
关于python - 无法使用神经网络解释预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713804/