简介
–Robot:基于LSTM模型的价格预测机器人。
文章包括以下部分:
1.为什么要尝试这个项目?
2.为什么选择这个模型?
3.模型的数据从何而来?
4.模型的优化过程?
5.项目可以进一步改进的方向。
近期以比特币为首的数字货币表现只能用疯狂来形容。来自比特币交易平台的最新报价显示,就在前一天,比特币盘中最高价达到29838.5元,距离3万元大关仅一步之遥。比特币近期火爆的市场备受关注,有一种人工智能似乎无所不能,那么问题来了,比特币交易可以用人工智能吗?
价格预测使用什么模型?现在流行的深度神经网络、卷积神经网络、循环神经网络,因为卷积神经网络更适合处理图片,循环神经网络更适合处理序列化的内容,尤其是LSTM是RNN的升级版。
LSTM(Long Short-Term)是一种长短期记忆网络,一种时间循环神经网络,适用于处理和预测时间序列中间隔和延迟相对较长的重要事件。 LSTM 已经在科学和技术领域有多种应用。基于 LSTM 的系统可以学习诸如翻译语言、控制机器人、图像分析、文档摘要、用于语音识别的图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等任务。比特币交易记录是事件序列上的附加数据,可以根据过去的交易记录来预测未来的价格,比较适合LSTM模型。下一个价格可以作为预测结果。
数据集
一个新的问题来了,数据从哪里来?
需要的数据是一个包含交易价格的序列,然后截取一部分作为输入值,下一部分作为预测值。经过一番搜索,主流交易平台都提供了一些历史数据,但不是很多。最终采用并爬取,其中包含 50 条比特币交易记录。
获取数据集的脚本
.py会获取这些交易记录,重新转成json,以图片的形式展示出来,供下一步数据分析使用。
运行前需要安装的依赖:
为了爬取数据,你需要使用这个库,一个非常有用的 HTTP 库。要可视化交易数据,请使用 .
pip install requests
pip install matplotlib
型号
.py
使用 LSMT 模型。取10条交易记录作为输入,如果第11个价格高于第10个,则设置输出为[1,0,0],如果低,则设置为[0,0,1],如果相同[0 , 1,0]。
for i in range(0,20):
#print(price)
one_predictor=np.array(price[i:i+20],dtype=float)
#print(one_predictor)
train_x.append(one_predictor)
if(int(price[i+20])>int(price[i+21])):
train_y.append(np.array([1,0,0]))
elif (int(price[i + 20]) == int(price[i + 21])):
train_y.append(np.array([0,1,0]))
elif(int(price[i+20])<int(price[i+21])):
train_y.append(np.array([0,0,1]))
下一步是定义模型:
lstm模型需要拆分成序列,然后传入模型。否则报错,代码中为x = tf.(x, , 1)。
得到结果,定义损失函数和优化函数
如何优化模型?
得到预测值后,与实际价格相比,会有损失函数。损失函数用于计算预测值与标记值的差值,进而优化损失函数优化模型。
pred = RNN(x, weights, biases)
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
# Evaluate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
项目开源地址及培训成果
训练设备:
GTX 980 钛
训练结果:
Iter , Loss= 0., = 0.75000 !
后续更新发布
更新计划
由于交易平台提供的历史交易记录很少,为了进一步提高训练效果,需要不断保存历史交易数据或者寻找更好的数据源。另一个方面是模型训练好后保存,以后可以直接使用。此外,还可以对模型本身进行一些优化。现在它只是预测,上升,下降和维持。以后可以进行更详细的评分,可以进行基于历史数据的回测等。
模型持久化、训练数据集持久化、测试数据集。
暂无评论内容