利用深度学习模型预测双色球

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。感兴趣的可以加一下,你的支持就是我的动力。

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46714.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【纯属娱乐】随机森林预测双色球

目录 一、数据标准化二、预测代码三、后续 一、数据标准化 首先,我们需要对原始数据进行处理,将其转换为可用于机器学习的格式。我们可以将开奖号码中的红球和蓝球分开,将其转换为独热编码,然后将其与期数一起作为特征输入到机器…

Matlab 马尔可夫链预测双色球

Matlab 马尔可夫链预测双色球 前言:彩票是一个坑,千万不要往里面跳。 总是想总是想一夜暴富,所以利用业余时间有在研究彩票,偶尔遇见了这个经典的数学预测算法的思路以及代码,研究了两个月,想和大家分享一…

【马克思主义】马克思200周年诞辰

马克思主义——掌握唯物辩证法这一看家本领,要学会运用科学的方法论。一是坚持矛盾分析方法。通过分析和研究社会内部矛盾运动过程,理性客观认识社会变化。二是坚持过程分析方法。新陈代谢是社会发展的普遍规律,每一历史过程均包含诸多阶段。…

马克思基本原理概论 单元综合测试(二)

资本主义商品生产过程的特征是价值增值过程两种商品可以按一定比例相互交换的原因,在于它们在生产中都耗费了一般的人类劳动支付工资的货币执行的是货币的支付手段职能在私有制经济中价值规律的作用会导致小商品生产者两极分化决定资本主义社会中劳动力的价值因素一…

马克思主义的简答题

马克思主义的含义: 马克思主义是由马克思,恩格斯创立的,为它们的后继者所发展,以批判资本主义,建设社会主义和实现共产主义为目标的科学理论体系,是关于无产阶级和人类解放的科学 三大理论体系:…

怎么取名都不队-Alpha阶段项目展示

一、项目亮点 项目的典型应用场景 典型应用场景1-个人开发尝试 应用场景案例实现链接:QuickStart:跟我一起来部署第一个函数吧 守好嘉今年18岁了,高考结束后如愿进入北航信息类,以计算机学院为目标的TA最近在自学Python后端,希…

foxmail错误信息:501 请登录exmail.qq.com修改密码

登录网页版腾讯企业邮箱,修改邮箱密码即可。 转载于:https://www.cnblogs.com/bignine/p/10095187.html

不需要邮箱 修改Gitlab账号密码(亲测可用)

突然忘记了gitlab的登陆用户密码,还在内网! 不要着急, 通过后台修改密码! 1. 进入gitlab 后台控制台,等到打开ruby控制界面,有点慢不要着急,也可去掉 sudo登入,但可能会失败(笔者就失败了)! sudo gitlab-rails console production 2 .登入…

Outlook添加新浪邮箱时的配置细节——登录密码

Outlook添加新浪邮箱时的配置细节——登录密码 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、完整配置流程1.确认邮箱账号是否开通POP/IMAP/SMTP服务2.输入某一电子邮箱地址3.选择账户类型4.根据账户类型…

完美邮箱(@88.com/@111.com/email.cn):专用密码登录

完美邮箱该怎么在第三方客户客户端上进行登录使用?完美邮箱包含以下几个域名: 88.com/111.com/email.cn,出于安全方面的考虑,完美的邮局限制了密码直接,在第三方客户端登录时(如网易邮箱大师/dreammail/畅邮/Thunderbird等邮件客…

email 发送邮箱修改密码

首先是 index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"en"> <h…

foxmail 企业邮箱密码修改

废了好大劲&#xff01;&#xff01;&#xff01; 登录腾讯企业邮 exmail.qq.com/login 如下图&#xff1a;

PGP加密解密QQ邮箱邮件

今天学习了PGP加密解密QQ邮箱邮件的方法&#xff0c;分享一下&#x1f601;&#x1f601;&#x1f601;&#x1f601; 涉及软件&#xff1a;PGP(PGP Desktop)、Outlook(office的) 加密&#xff1a; 第一步&#xff1a;安装PGP软件&#x1f602;&#x1f602;&#x1f602; 具体…

outlook 设置POP3/IMAP/SMTP服务 (账号密码-授权码)发送、获取授权码

1. 说明 三方应用账号密码连接邮箱时&#xff0c;此时的密码并不是真正的邮箱密码&#xff0c;而是授权码。授权码需要去对应的邮箱设置中开通&#xff0c;此处是outlook 的授权码获取方式2. 准备工作 2.1 申请邮箱 直接访问地址 https://www.microsoft.com/zh-cn/microsoft-…

webmail邮箱(webmail邮箱密码修改)

万网邮箱如何取消邮箱webmail的验证码功能 您需要以postmaster身份登陆企业邮箱的webmail&#xff0c;顺序点击“域管理”>“标志定制”,在选项“是否显示图形验证码”中进行设置。 如果存在设置无效的情况&#xff0c;请您返回“标志定制”栏目&#xff0c;检查首页面定制…

outlook2016邮箱怎么修改密码

打开网页版的邮箱 右上角有设置按钮 点击设置 选择“我的账户” 向下拉选择 “更改您的密码”

开启微软 Outlook 邮箱 POP, IMAP, SMTP 服务和获取服务密码(授权码)

微软 Outlook 邮箱各种服务详细信息 服务类型服务器地址端口加密方法POPoutlook.office365.com995TLSIMAPoutlook.office365.com993TLSSMTPsmtp.office365.com587STARTTLS 然而仅仅有以上信息还不够&#xff0c;需要获取服务密码(授权码)才能够使用 POP, IMAP, SMTP 这三种服务…

chatgpt赋能python:Python表格制作教程

Python表格制作教程 在今天的数字时代&#xff0c;数据是至关重要的。在各种领域的数据分析和科学研究中&#xff0c;表格是最常用的一种数据呈现形式。Python是一种功能强大的编程语言&#xff0c;它具有广泛的应用范围&#xff0c;其中一个应用就是制作数据表格。通过Python…

用chatgpt实现 java导出excel复杂表。

记录一次使用chatgpt解决实际问题的&#xff0c;需求是在页面添加一个订单导出excel的功能&#xff0c;订单编号、订单明细&#xff0c;相同订单编号合并单元格&#xff0c;模板如下 表头表尾不用说&#xff0c; 主要是表格内容部分&#xff0c;左边是订单编号&#xff0c;右边…

chatgpt赋能python:如何用Python制作表格

如何用Python制作表格 在编写数据分析报告或者制作科研论文时&#xff0c;经常需要使用表格来展示数据或者统计分析结果。在传统的Word或Excel软件中制作表格虽然简单易用&#xff0c;但是在大量的数据处理和自动化处理方面往往需要耗费大量的时间和精力。而Python作为一种高效…