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

1、前言

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

2、数据爬取

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

import requests, bs4
import os, time
import operator
from itertools import combinations, permutations
import torch

class 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.text

    def 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):
                continue
            center = row.find(class_="qh7").string.strip()
            print(center)
            if center.startswith("模拟"):
                break
            redBalls = 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 x
    
    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.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。感兴趣的可以加一下,你的支持就是我的动力。

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

 

  • 27
    点赞
  • 185
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
深度学习模型预测代码可以使用Python及相关的库来实现。在深度学习模型预测中,常用的库包括keras、scikit-learn、pandas和tensorflow。这些库提供了丰富的功能和工具,可以帮助我们构建和训练深度神经网络模型。 在使用深度学习模型进行预测之前,我们需要先准备好数据集,并对数据进行预处理。然后,我们可以使用keras库来构建深度神经网络模型。根据不同的任务和数据类型,可以选择不同的模型结构,如LSTM、GRU、CNN、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等。 在构建模型后,我们可以使用优化算法来更新模型的参数值,以使任务的指标表现变好。常用的优化算法包括梯度下降法和随机梯度下降法。通过迭代训练模型,我们可以得到一个“好”的模型。 最后,我们可以使用训练好的模型对新的数据进行预测。通过调用模型预测函数,我们可以得到预测结果。 具体的深度学习模型预测代码可以根据具体的任务和数据集进行编写。可以参考相关的教程和文档,以及使用示例代码来帮助实现深度学习模型预测功能。 #### 引用[.reference_title] - *1* *3* [一文深度学习建模预测全流程(Python)](https://blog.csdn.net/qq_40877422/article/details/121301741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)](https://blog.csdn.net/m0_47256162/article/details/128585814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超超爱AI

土豪请把你的零钱给我点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值