使用 Tensorflow/tflearn 预测金融数据的层
Layers for predicting financial data using Tensorflow/tflearn
我想预测利率,我有一些相关因素,例如股票指数和货币供应量等。因子数最多可达200。
例如,训练数据 X 包含因子,y 是我要训练和预测的利率。
factor1 factor2 factor3 factor176 factor177 factor178
X= [[ 2.1428 6.1557 5.4101 ..., 5.86 6.0735 6.191 ]
[ 2.168 6.1533 5.2315 ..., 5.8185 6.0591 6.189 ]
[ 2.125 4.7965 3.9443 ..., 5.7845 5.9873 6.1283]...]
y= [[ 3.5593]
[ 3.014 ]
[ 2.7125]...]
所以我想用tensorflow/tflearn来训练这个模型,但我真的不知道我应该选择什么方法来做回归。我之前试过tflearn的LinearRegression,但是效果不是很好
现在,我只使用我在网上找到的代码。
net = tflearn.input_data([None, 178])
net = tflearn.fully_connected(net, 64, activation='linear',
weight_decay=0.0005)
net = tflearn.fully_connected(net, 1, activation='linear')
net = tflearn.regression(net, optimizer=
tflearn.optimizers.AdaGrad(learning_rate=0.01, initial_accumulator_value=0.01),
loss='mean_square', learning_rate=0.05)
model = tflearn.DNN(net, tensorboard_verbose=0, checkpoint_path='tmp/')
model.fit(X, y, show_metric=True,
batch_size=1, n_epoch=100)
当误差范围为 ±10% 时,结果大约是 50% 的准确度。
我尝试将 window 设为 7 天,但结果仍然很糟糕。所以我想知道我可以使用什么额外的层来使这个网络更好。
首先这个网络毫无意义。如果您的隐藏单元没有任何激活,则您的网络 等同于线性回归 。
所以首先改变
net = tflearn.fully_connected(net, 64, activation='linear',
weight_decay=0.0005)
至
net = tflearn.fully_connected(net, 64, activation='relu',
weight_decay=0.0005)
另一个通用的事情是总是规范化你的数据。你的 X 很大,y 也很大 - 确保它们不是,例如通过美白它们(使它们的平均值为 0,标准差为 1)。
找到合适的架构是个难题,您不会找到任何 "magical recipies"。从了解你在做什么开始。记录你的训练,看看训练损失是否收敛到小值,如果没有——你要么训练时间不够长,网络太小,要么训练超参数关闭(比如学习权太大,正则化太高等)
我想预测利率,我有一些相关因素,例如股票指数和货币供应量等。因子数最多可达200。
例如,训练数据 X 包含因子,y 是我要训练和预测的利率。
factor1 factor2 factor3 factor176 factor177 factor178
X= [[ 2.1428 6.1557 5.4101 ..., 5.86 6.0735 6.191 ]
[ 2.168 6.1533 5.2315 ..., 5.8185 6.0591 6.189 ]
[ 2.125 4.7965 3.9443 ..., 5.7845 5.9873 6.1283]...]
y= [[ 3.5593]
[ 3.014 ]
[ 2.7125]...]
所以我想用tensorflow/tflearn来训练这个模型,但我真的不知道我应该选择什么方法来做回归。我之前试过tflearn的LinearRegression,但是效果不是很好
现在,我只使用我在网上找到的代码。
net = tflearn.input_data([None, 178])
net = tflearn.fully_connected(net, 64, activation='linear',
weight_decay=0.0005)
net = tflearn.fully_connected(net, 1, activation='linear')
net = tflearn.regression(net, optimizer=
tflearn.optimizers.AdaGrad(learning_rate=0.01, initial_accumulator_value=0.01),
loss='mean_square', learning_rate=0.05)
model = tflearn.DNN(net, tensorboard_verbose=0, checkpoint_path='tmp/')
model.fit(X, y, show_metric=True,
batch_size=1, n_epoch=100)
当误差范围为 ±10% 时,结果大约是 50% 的准确度。 我尝试将 window 设为 7 天,但结果仍然很糟糕。所以我想知道我可以使用什么额外的层来使这个网络更好。
首先这个网络毫无意义。如果您的隐藏单元没有任何激活,则您的网络 等同于线性回归 。
所以首先改变
net = tflearn.fully_connected(net, 64, activation='linear',
weight_decay=0.0005)
至
net = tflearn.fully_connected(net, 64, activation='relu',
weight_decay=0.0005)
另一个通用的事情是总是规范化你的数据。你的 X 很大,y 也很大 - 确保它们不是,例如通过美白它们(使它们的平均值为 0,标准差为 1)。
找到合适的架构是个难题,您不会找到任何 "magical recipies"。从了解你在做什么开始。记录你的训练,看看训练损失是否收敛到小值,如果没有——你要么训练时间不够长,网络太小,要么训练超参数关闭(比如学习权太大,正则化太高等)