1、前言

深度学习模型可以简单理解为一个高度非线性的复合函数,网路输入可以看作自变量x,输出可以看作因变量y。看过网上其他人做的一些双色球预测,基本上是基于BP神经网络(也就是全连接神经网络)和LSTM的预测方法。其中我认为基于LSTM的方法靠谱一些。但因为本身对LSTM不熟悉,以及我认为卷积神经网络也可以用来做双色球预测,接下来进行尝试。

2、数据爬取

深度学习模型是基于数据驱动的表达机制,因此首先我们需要获取双色球历史数据,爬虫代码如下:

import requests, bs4
import os, time
import operator
from itertools import combinations, permutations
import torchclass DoubleColorBall(object):def __init__(self):self.balls = {}self.baseUrl = 'http://tubiao.zhcw.com/tubiao/ssqNew/ssqJsp/ssqZongHeFengBuTuAsc.jsp'self.dataFile = './balls_data.txt'def getHtml(self, url):headers = {'Referer':'http://tubiao.zhcw.com/tubiao/ssqNew/ssqInc/ssqZongHeFengBuTuAsckj_year=2016.html','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'    }self.session = requests.Session()response = self.session.get(url, headers=headers)return response.textdef getBall(self):for year in range(2003, 2021):url = self.baseUrl + '?kj_year=%s' % (year, )print(url)html = self.getHtml(url)self.bs = bs4.BeautifulSoup(html, 'html.parser')if self.bs:data = self.bs.find_all(class_='hgt')self.parseBall(data)def parseBall(self, data):self.balls = {}for row in data:if not isinstance(row, bs4.element.Tag):continuecenter = row.find(class_="qh7").string.strip()print(center)if center.startswith("模拟"):breakredBalls = row.find_all(class_="redqiu")blueBall = row.find(class_="blueqiu3").string.strip()self.balls[center] = [r.string for r in redBalls] + [blueBall]self.saveBall(self.balls)def saveBall(self, data):with open(self.dataFile, 'a+') as f:for r in sorted(data,reverse=True):f.write(str(r) + ' ' + ' '.join(data[r]) + '\n')if __name__ == '__main__':ball = DoubleColorBall()ball.getBall()

我爬取的数据是2003~2020年的所有双色球数据,并将其保存在txt文档中,保存格式如下:每行是期号对应的中奖号码。

20044 7 8 16 17 19 24 7
20043 1 11 24 25 27 30 7
20042 2 6 7 11 14 31 3
20041 6 7 16 22 24 25 13
20040 1 6 12 16 19 21 4
20039 2 9 10 11 16 29 2
20038 1 6 7 18 23 24 15
20037 1 4 11 13 17 24 15
20036 7 9 16 22 24 32 6

3、模型搭建

其他人提供的模型大多是利用上一期预测下一期,我认为应该用多期预测下一期,因此我将十期的数据堆叠成一个二维数组作为网络输入,将紧接着的下一期作为前十期的标签。同时考虑到这是个双色球预测回归的任务,我使用扁平卷积进行特征提取,利用1x3卷积提取单期内开奖号码之间的联系,利用3x1卷积提取多期开奖号码之间的关联性,同时借鉴了Googlenet的分支结构和Resnet的残差结构。我把自己设计的这个模块称为致富模块~

class Rich_Block(nn.Module):def __init__(self,input_c,output_c):super(Rich_Block,self).__init__()self.conv_1x1 = nn.Conv2d(in_channels=input_c,out_channels=16,kernel_size=1)self.convh_3x3 = nn.Conv2d(in_channels=16,out_channels=16,kernel_size=(1,3),padding=1)self.convv_3x3 = nn.Conv2d(in_channels=16,out_channels=16,kernel_size=(3,1))self.conv_last = nn.Conv2d(in_channels=32,out_channels=output_c,kernel_size=1)self.relu = nn.ReLU(inplace=True)def forward(self,x):x = self.conv_1x1(x)x1 = self.convh_3x3(x)x1 = self.relu(x1)x1 = self.convv_3x3(x1)x1 = self.relu(x1)x_cat = torch.cat((x1,x),dim=1)x_out = self.conv_last(x_cat)return x_out      

接下来就是利用致富模块和全连接层搭建完整模型,模型并不复杂,代码如下:

class Get_Rich(nn.Module):def __init__(self):super(Get_Rich,self).__init__()self.block1 = Rich_Block(1,16)self.block2 = Rich_Block(16,32)self.block3 = Rich_Block(32,32)self.block4 = Rich_Block(32,32)self.block5 = Rich_Block(32,64)self.block6 = Rich_Block(64,64)self.block7 = Rich_Block(64,64)self.block8 = Rich_Block(64,128)self.block9 = Rich_Block(128,128)self.avg_pool = nn.AdaptiveAvgPool2d((1,1))self.line1 = nn.Linear(128,128)self.line2 = nn.Linear(128,64)self.line3 = nn.Linear(64,64)self.line4 = nn.Linear(64,7)def forward(self,x):x = self.block1(x)x = self.block2(x)x = self.block3(x)x = self.block4(x)x = self.block5(x)x = self.block6(x)x = self.block7(x)x = self.block8(x)x = self.block9(x)x = self.avg_pool(x)x = x.view(x.size(0), -1)x = self.line1(x)x = self.line2(x)x = self.line3(x)x = self.line4(x)return xdef _initialize_weights(self):for m in self.modules():if isinstance(m, nn.Conv2d):n = m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))if m.bias is not None:m.bias.data.zero_()elif isinstance(m, nn.Linear):n = m.weight.size(1)m.weight.data.normal_(0, 0.01)m.bias.data.zero_()

至于数据前处理和模型训练的代码就不一一贴出了,因为网络输出为线性输出,损失函数我使用的是均方差损失函数-mse loss,优化器使用SGD,训练过程中使用学习率衰减。

4、总结

网上很多模型的预测结果也只能在正确开奖号码附近波动,那么我们的结果是振奋人心的,我的模型水平竟然和他们是一样的,哈哈哈哈~~~,09152期进行预测结果如下图所示:

尝试了很多期的预测结果都是在开奖号码附近波动,这个结果也预料到了,因为训练loss值在下降到10左右就稳定了,我认为模型结构依然有一些问题,后续会持续改进。勇者敢于尝试,但在尝试过程中能够懂得分析问题,懂得趋吉避凶,我认为这就是智勇双全。因此,先从自身做起,我买了30注双色球,如下图所示,大手笔!!!顺便忽悠好兄弟也买了两注。希望今晚吃鸡!同时我建了一个双色球每日推荐群:725477359。感兴趣的可以加一下,你的支持就是我的动力。

意意大神保佑,今晚中奖!

利用深度学习模型预测双色球相关推荐

  1. 基于python语言,使用爬虫和深度学习来预测双色球(二、模型训练与测试)

    在上一篇博文中(基于python语言,使用爬虫和深度学习来预测双色球(一.数据的准备)),我们完成了数据的准备,通过爬虫的方式将2003年至今的每一期的中奖数据保存到了txt文件中,那么我们现在就开始 ...

  2. 手把手:教你如何用深度学习模型预测加密货币价格

    如果要评选2017三大流行金酸梅奖,毫无疑问,获奖的肯定是指尖陀螺.人工智能以及加密货币.加密货币是一项颠覆性的技术,它背后的原理引人注目,我十分看好它未来的发展. 实际上,我并没有持有任何加密货币, ...

  3. 基于原始影像数据的深度学习模型预测脑龄可获得可靠的遗传生物标志物

    基于机器学习对神经影像数据进行分析可以准确预测健康人的年龄.预测年龄与健康大脑的年龄的偏差被证明与认知障碍和疾病有关.在这里,我们基于深度学习的预测建模方法,特别是卷积神经网络(CNN),进一步测试了 ...

  4. 和免疫荧光标记说拜拜 | 谷歌Cell论文:深度学习模型预测荧光位置

    Root 发自 凹非寺 量子位 出品 | 公众号 QbitAI 在生物医学的研究里,显微镜可以帮助科学家们观察定位细胞水平或分子水平的物质. 常用的相差显微镜观察法,是从生物组织的一侧给光,对细胞损伤 ...

  5. 独家 | 利用深度学习来预测Spotify上的Hip-Hop 流行程度

    作者:Nicholas Indorf翻译:Gabriel Ng校对:zrx本文约10000字,建议阅读13分钟 项目中收集并使用了 Spotify 数据库中最近发布的hip-hop曲目的音频预览样本和 ...

  6. 利用深度学习来预测股票价格变动

    博客原文:http://www.360doc.com/content/19/0112/18/410279_808412489.shtml 完整架构概述 在这篇文章中,我将创建一个预测股票价格变动的完整 ...

  7. 计算深度学习模型预测置信度

    文章目录 问题描述 解决方案 参考文献 问题描述 解决方案 import numpy as npproba = [0.9, 0.01, 0.05, 0.04]print(np.argsort(prob ...

  8. 文献阅读:深度学习模型利用生物医学文本上下文关系进行命名实体识别

    文献阅读:利用深度学习模型在生物医学文本的上下文关系中进行命名实体识别 题目 1 背景 2 材料和方法 2.1 GRAM-CNN方法 2.1.1 嵌入方法 2.1.2 GRAM-CNN 2.1.3 C ...

  9. 训练好的深度学习模型原来这样部署的!(干货满满,收藏慢慢看)

    点击上方蓝字关注我们 计算机视觉研究院专栏 作者:Edison_G 当我们辛苦收集数据.数据清洗.搭建环境.训练模型.模型评估测试后,终于可以应用到具体场景,但是,突然发现不知道怎么调用自己的模型,更 ...

最新文章

  1. 别人家的团队怎么用RabbitMQ:我总结的5点规范
  2. 微生物组助手——最易学的扩增子、宏基因组分析流程
  3. 中科院计算所关于“木兰”语言问题处理情况说明
  4. Google Guava Collections 使用介绍
  5. 面向对象也可以搞单片机!
  6. python-函数的返回值
  7. JS事件 鼠标移开事件(onmouseout)鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序。...
  8. redis string底层数据结构
  9. CV中必要的数学知识_奇异值的物理意义是什么?
  10. php做APP接口开发,接口的安全性
  11. 计算机辅助翻译入门编委,计算机辅助翻译入门简介,目录书摘
  12. 数据挖掘技术、方法及应用
  13. 中兴B860AV2.1-T非高安 /高安版本-通用线刷固件及教程
  14. HTML 网页自动刷新
  15. 信号的同调性(Coherence)分析及MATLAB实例
  16. HOJ 13108 Just Another Knapsack Problem (AC自动机+dp)
  17. 意外发现一款很好用的开源BI工具——DataEase
  18. 让AWS虚机访问公司内网资源(SSH反向代理)
  19. sqlserver位数不够左边补0
  20. 小米pro15笔记本开机错误代码怎么U盘重装系统

热门文章

  1. 互联网进军影视作品的软广告
  2. Linux下开发环境搭建---2. emacs篇
  3. 【VUE】基础用法(属性与事件的绑定,条件渲染等)
  4. 安卓模拟器打开开发者模式(USB调试)的方法
  5. pip install -r requirements.txt
  6. (11)求五百万内的亲和数
  7. 文字点选行为验证码生成器
  8. 光电二极管(photodiode)跨阻放大电路设计要点(一)
  9. Html —— 显示滚动条
  10. 笔记本拆c面_笔记本拆机清灰 篇三:SONY 索尼 FE35C 拆机清灰