专栏首页机器学习AI算法工程LSTM模型实战案例:TensorFlow实现预测3位彩票号码

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

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

完整代码、 数据集

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

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

LSTM介绍

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

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

看看数据集的结构

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

我们可以把三个数组合成一组数,就像数据集中体现的那样,并且把一组数当作一个数或者说当作一个单词。这样在预处理数据集的时候会简单一些,从索引到单词(0 -> ‘000’)和从单词到索引(‘012’-> 12)其实都是同一个数。

预测网络介绍

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

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

实现数据预处理

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

Lookup Table

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

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

构建计算图

使用实现的神经网络构建计算图。 要说明的是优化损失的部分,这里要优化两个损失: cost:损失函数没有使用softmax交叉熵,而是使用了sequence loss。 similar_loss:另外一个要优化的想法是,要让预测的结果与正确结果在嵌入矩阵中的特征向量尽量接近,即让两者距离越来越小。 得到了最终的损失:total_loss = cost + similar_loss 使用normalized_embedding做相似度上距离的计算。

训练

在预处理过的数据上训练神经网络。 这里除了保存预测准确率之外,还保存了三类准确率:

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

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

浮动距离中位数的概率越高,说明我们的模型训练的不好,理想情况下应该是Top K准确率越来越高,说明模型预测的越来越准确。一旦模型预测的很差,那么预测向量中一定会有一部分区域是热点区域,也就是距离中位数指示的区域,这样可以通过距离中位数来进行预测。我们使用距离中位数来帮助我们进行预测,相当于为预测做了第二套方案,一旦模型预测不准确的时候,可以尝试使用距离中位数来预测。

这三类准确率都是范围的,我们只能知道在某个范围内猜中的概率会高一些,但是到底是范围内的哪一个是准确值则很难说。

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

实现生成预测函数

选择号码

实现 pick_word() 函数从概率向量 probabilities或相似度向量sim中选择号码。 pred_mode是选择预测的种类:

  • sim:从相似度向量Top K中选号。
  • median:从浮动距离中位数(相似度向量)Range K中选号。
  • topk:从概率向量Top K中选号。
  • max:从概率向量中选择最大概率的号码。

结论

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

正常的开奖概率是1‰。 经过25次迭代训练之后准确率是0,一个都没猜中。。。 top k和相似度向量top k差不多,都是25‰左右,但因为是top 10,所以实际上是2.5‰左右。

浮动中位数准确率在11.25‰~32.5‰之间,但由于这个范围range 10,所以实际上是1.125~3.25‰之间。

最好的时刻是在Epoch 2 floating median range k accuracy 0.041666666666666664,也就是4.16‰。 真没比正常开奖概率好多少。

从训练结果打印出的准确率,和往期开奖的相互之间的距离图都可以看得出来,想进行彩票预测实际上是不可行的。在排列三如此简单的、排列组合只有1000(样本空间已经足够小了)的等概率事件上进行预测都如此的困难,这也印证了数学的奇妙之处。都说了彩票是等概率,那么出任何一种号码都是有可能的,没有规律可言。惊不惊喜?意不意外?

新的思路

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

  • int_sentences:里面保存着上面生成的若干期号码
  • val_data:是最新几期的开奖号码,作为validate数据集

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

看看最后一期的号码是427,我们预测的是419,是不是很接近?

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

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度学习word2vec笔记(基础篇)

    一.前言 伴随着深度学习的大红大紫,只要是在自己的成果里打上deep learning字样,总会有人去看。深度学习可以称为当今机器学习领域的当之无愧的巨星,也特...

    机器学习AI算法工程
  • 运用Spark进行交通数据案例分析:大型活动大规模人群的检测与疏散

    作者: 科赛网 汪梦梦 邓以勒 今天主要是以一个数据分析者的角度来与大家分享如何使用spark进行大数据分析。 ? 我将分以下4部分为大家进行介绍。首先介...

    机器学习AI算法工程
  • python + selenium + PhantomJS 获取腾讯应用宝APP评论

    PhantomJS PhantomJS 是一个基于WebKit的服务器端JavaScript API,它无需浏览器的支持即可实现对Web的支持,且原生支持各种W...

    机器学习AI算法工程
  • 数组中数对差最大

    数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11(16 - 5)

    阳光岛主
  • Web前端JQuery入门实战案例

    快速的,轻量级的,功能丰富的 js 库。动画(animation),ajax,DOM,更简单,容易使用的api。

    达达前端
  • NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)

    · 训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)

    素质
  • 5分钟短视频,带你走进日志易SPL,助你日志分析更容易

    日志易是一个配置灵活、功能强大、容易使用的日志管理工具,它对日志进行集中采集和实时索引,提供搜索、分析、可视化和监控告警等功能,帮助企业进行线上业务实时监控、业...

    日志易
  • 建设DevOps统一运维监控平台,先从日志监控说起

    前言 随着Devops、云计算、微服务、容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器、虚拟机、物...

    yuanyi928
  • TCP 看我就够了

    陈雨尘
  • 大数据开发工程师岗位分析

    最近一年大数据火爆异常,各种培训班开课广告满天飞,很多做开发的朋友也想转到大数据这一行,在投递简历的时候进场被几个岗位搞迷糊,他们是大数据分析师,大数据研发工程...

    大数据工程师-公子

扫码关注云+社区

领取腾讯云代金券