LSTM模型实战案例:TensorFlow实现预测3位彩票号码

640?wx_fmt=gif

向AI转型的程序员都关注了这个号👇👇👇

大数据挖掘DT机器学习  公众号: datayx

使用人工智能技术来预测彩票,是这次的主题,那么预测哪种彩票呢?我们先选择简单一些的,就是排列组合少一些的,如果证明我们的模型work,再扩展到其他的彩票上。最终我选择了排列三, 从000-999的数字中选取1个3位数,一共有1000种,中奖概率就是千分之一,够简单了吧。 

完整代码、 数据集

关注微信公众号 datayx  然后回复 彩票 即可获取。

数据是按照每期一组数的顺序排列的,从第一期到最新的一期,实际上是时间序列的数据。跟回归预测有很大的区别,因为特征上没有特殊的意义,不具备一组特征x映射到label y的条件。但是按照时间序列来训练的话就不一样了,输入x是一期的开奖结果,要学习的y是下一期的开奖结果。

LSTM介绍

我们需要从过往的历史数据中寻找规律,LSTM再适合不过了。如果你对LSTM不熟悉的话,以下几篇文章建议你阅读: 

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

[译] 理解 LSTM 网络

 http://www.jianshu.com/p/9dc9f41f0b29

RNN以及LSTM的介绍和公式梳理

http://blog.csdn.net/Dark_Scope/article/details/47056361


看看数据集的结构

640?wx_fmt=png

一共4656条记录,4600多期了。共出现了988个不重复的结果,就是说还有(1000 – 988)12组数到现在还没有开出来过。文件中第一行是最新的一期,第二行是之前的一期,。。。,最后一行是第一期。 

预测网络介绍

网络的输入是每一期的开奖结果,总共有1000组数,用one hot编码是一个1000维的稀疏向量:

640?wx_fmt=png

网络训练的代码,使用了几个trick,在下文<构建计算图>和<训练>章节会做说明,<结论>在最后。

实现数据预处理

首先要做的事是对数据进行预处理,要实现下面的函数: 

使用词向量之前,我们需要先准备好单词(彩票开奖记录)和ID之间的转换关系。在这个函数中,创建并返回两个字典:

  • 单词到ID的转换字典: vocab_to_int

  • ID到单词的转换字典: int_to_vocab

640?wx_fmt=png

构建计算图

使用实现的神经网络构建计算图。 

640?wx_fmt=png

训练

在预处理过的数据上训练神经网络。

  • Top K准确率: 预测结果中,前K个结果的预测准确率。

  • 与预测结果距离最近的Top K准确率: 先得到预测结果,使用嵌入矩阵计算与预测结果Top 1距离最近的相似度向量,取这个相似度向量中前K个结果的预测准确率。

  • 浮动距离中位数范围K准确率:得到预测结果之后,计算正确结果在预测结果中的距离中位数,这个距离实际上是元素在向量中的位置与第一个元素位置的距离。这个距离数据告诉我们真正的结果在我们的预测向量中的位置在哪。每次训练之后,距离中位数都会有变化,所以是浮动的,当然也可以考虑使用众数或均值。使用中位数表示真正的结果通常会在我们的预测向量中大部分时候(平均、或者说更具代表性的)位置在哪。所以这个准确率就是以中位数为中心,范围K为半径预测准确的概率。

这里距离中位数准确率我分别在预测结果向量和与预测结果Top 1距离最近的相似度向量中都做了统计,从结果来看在相似度向量中的距离中位数准确率要稍好一些。 

640?wx_fmt=png

最后一次迭代输出的结果:

640?wx_fmt=png

640?wx_fmt=png

实现生成预测函数

选择号码

实现 pick_word() 函数从概率向量 probabilities或相似度向量sim中选择号码。

  • sim:从相似度向量Top K中选号。

  • median:从浮动距离中位数(相似度向量)Range K中选号。

  • topk:从概率向量Top K中选号。

  • max:从概率向量中选择最大概率的号码。

640?wx_fmt=png

结论

先从数据上说,训练的最后打印出的准确率如下:

Epoch 24 floating median sim range k accuracy 0.0325

Epoch 24 floating median range k accuracy 0.01125

Epoch 24 similar top k accuracy 0.0275

Epoch 24 top k accuracy 0.025Epoch 24 accuracy 0.0

正常的开奖概率是1‰。

新的思路

既然不能准确的预测,唯一能给我们提供思路的就是学习器学到的趋势,来看看下面的代码。

  • int_sentences:里面保存着上面生成的若干期号码

  • val_data:是最新几期的开奖号码,作为validate数据集

640?wx_fmt=png

看得出来,虽然每期预测的号码不对,但是下一期号码的大概范围以及若干期号码的变化趋势学习的还可以,剩下的就要靠运气了:) 

https://blog.csdn.net/chengcheng1394/article/details/78756522


阅读过本文的人还看了以下:

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

640?wx_fmt=jpeg

长按图片,识别二维码,点关注

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值