计算机系统应用教程网站

网站首页 > 技术文章 正文

基于LSTM的双色球预测(一)

btikc 2024-12-15 11:34:51 技术文章 55 ℃ 0 评论

前言

人工智能目前是越来越火了,而我们本次的主题就是通过人工智能技术来预测彩票,来提高我们的中奖概率;

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

LSTM介绍

既然我们需要通过过往的历史数据中寻找规律,那么LSTM再适合不过了。如果你对LSTM不熟悉的话,又希望进一步学习的话,以下几篇文章可以帮助你进一步学习:

安装前准备

python 3.6
Flask==1.1.1
tensorflow==2.0.0 
tensorflow-gpu==2.0.0
requests==2.22.0
bs4==0.0.1

其中TensorFlow和TensorFlow-GPU只需要安装其中一个即可,如果有较好的独立显卡,建议安装TensorFlow-gpu,如果只是笔记本集成显卡或者普通显卡,建议使用TensorFlow即可;

建立项目

在本地建立项目predict_Lottery_ticket-master,在里面新建两个文件夹data、model,分别用于存放历史数据和模型;整体项目结构如下

采集历史数据

既然要训练模型,我们首先,先要收集数据,创建python文件get_train_data.py,内部代码如下:

# -*- coding:utf-8 -*-

import requests
import pandas as pd
from bs4 import BeautifulSoup
from config import *

def get_current_number():
    """ 获取最新一期数字
    :return: int
    """
    r = requests.get("{}{}".format(URL, "history.shtml"))
    r.encoding = "gb2312"
    soup = BeautifulSoup(r.text, "lxml")
    current_num = soup.find("div", class_="wrap_datachart").find("input", id="end")["value"]
    return current_num

def spider(start, end, mode):
    """ 爬取历史数据
    :param start 开始一期
    :param end 最近一期
    :param mode 模式
    :return:
    """
    url = "{}{}{}".format(URL, path.format(start), end)
    r = requests.get(url=url)
    r.encoding = "gb2312"
    soup = BeautifulSoup(r.text, "lxml")
    trs = soup.find("tbody", attrs={"id": "tdata"}).find_all("tr")
    data = []
    for tr in trs:
        item = dict()
        item[u"期数"]= tr.find_all("td")[0].get_text().strip()
        item[u"红球号码_1"] = tr.find_all("td")[1].get_text().strip()
        item[u"红球号码_2"] = tr.find_all("td")[2].get_text().strip()
        item[u"红球号码_3"] = tr.find_all("td")[3].get_text().strip()
        item[u"红球号码_4"] = tr.find_all("td")[4].get_text().strip()
        item[u"红球号码_5"] = tr.find_all("td")[5].get_text().strip()
        item[u"红球号码_6"] = tr.find_all("td")[6].get_text().strip()
        item[u"蓝球"] = tr.find_all("td")[7].get_text().strip()
        item[u"快乐星期天"] = tr.find_all("td")[8].get_text().strip()
        item[u"奖池奖金(元)"] = tr.find_all("td")[9].get_text().strip()
        item[u"一等奖_注数"] = tr.find_all("td")[10].get_text().strip()
        item[u"一等奖_奖金(元)"] = tr.find_all("td")[11].get_text().strip()
        item[u"二等奖_注数"] = tr.find_all("td")[12].get_text().strip()
        item[u"二等奖_奖金(元)"] = tr.find_all("td")[13].get_text().strip()
        item[u"总投注额(元)"] = tr.find_all("td")[14].get_text().strip()
        item[u"开奖日期"] = tr.find_all("td")[15].get_text().strip()
        data.append(item)

    if mode == "train":
        df = pd.DataFrame(data)
        df.to_csv("data/data.csv", encoding="utf-8")
    elif mode == "predict":
        return pd.DataFrame(data)

if __name__ == "__main__":
    print("最新一期期号:{}".format(get_current_number()))
    print("正在获取数据。。。")
    spider(1, get_current_number(), "train")

运行后,会发现在data文件夹内多了一个data.csv,打开后会发现里面存放了历史的彩票数据,后续每次开奖后,运行此python文件,就可以收集最新一期的双色球数据了;

大家有任何问题都可以进行评论,下一期,我们将重点讲述如何训练创建和训练模型;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表