百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

基于LSTM的双色球预测(二)(双色球预测模型估计与评估)

ztj100 2025-07-08 00:24 4 浏览 0 评论

前言

本文主要依靠LSTM模型实现双色球预测,具体环境配置请依照上文进行设置:基于LSTM的双色球预测(一)

建立配置文件

在本地项目
predict_Lottery_ticket-master内新建python文件,命名为config.py,主要用于配置采集数据地址和数据存放地址,内部代码如下:

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

URL = "https://datachart.500.com/ssq/history/"
path = "newinc/history.php?start={}&end="

BOLL_NAME = [
    "红球号码_1",
    "红球号码_2",
    "红球号码_3",
    "红球号码_4",
    "红球号码_5",
    "红球号码_6",
    "蓝球"
]

train_data_path = "data/data.csv"

建立LSTM模型

在本地项目
predict_Lottery_ticket-master内新建python文件,命名为train_model.py,主要使用data内的彩票数据进行LSTM模型的建立,内部代码如下:

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

import os
import numpy as np
import pandas as pd
from config import *
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.callbacks import EarlyStopping
import tensorflow as tf

# os.environ["CUDA_VISIBLE_DEVICES"] = "0"
# gpu_options = tf.compat.v1.GPUOptions(per_process_gpu_memory_fraction=1)
# sess =  tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(gpu_options=gpu_options))

DATA = pd.read_csv(train_data_path)
if not len(DATA):
    raise Exception("请执行 get_train_data.py 进行数据下载!")


def transform_data(name):
    """ 数据转换
    :param name: 要训练的球号
    :return:
    """
    data_list = DATA[name].tolist()
    data_list_len = len(data_list)
    end_index = int(np.float(data_list_len / float(4)) * 4)
    data_list.reverse()
    fl = []
    for index, _ in enumerate(data_list[0: end_index - 4]):
        l_ = []
        for i in range(4):
            l_.append(data_list[index + i])
        fl.append(l_)
    return np.array(fl)


def create_model_data(name):
    """ 创建训练数据
    :param name: 要训练的球号
    :return:
    """
    data = transform_data(name)
    x_data = data[:, 0:3].reshape([-1, 3, 1])
    y_data = data[:, 3:].ravel()
    return x_data, y_data


def train_model(x_data, y_data, b_name):
    """ 模型训练
    :param x_data: 训练样本
    :param y_data: 训练标签
    :param b_name: 球号名
    :return:
    """
    n_class = 0
    if b_name[0] == "红":
        n_class = 33
    elif b_name[0] == "蓝":
        n_class = 16
    x_data = x_data - 1
    y_data = to_categorical(y_data - 1, num_classes=n_class)
    print("The x_data shape is {}".format(x_data.shape))
    print("The y_data shape is {}".format(y_data.shape))
    model = Sequential()
    model.add(LSTM(32, input_shape=(3, 1), return_sequences=True))
    model.add(LSTM(32, recurrent_dropout=0.2))
    model.add(Dense(n_class, activation="softmax"))
    model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=["accuracy"])
    callbacks = [
        EarlyStopping(monitor='accuracy', patience=10000, verbose=2, mode='max',restore_best_weights='true')
    ]
    model.fit(x_data, y_data, batch_size=2596, epochs=100000, verbose=1,callbacks=callbacks)
    if not os.path.exists("model"):
        os.mkdir("model")
    model.save("model/lstm_model_{}.h5".format(b_name))


if __name__ == '__main__':
    for b_n in BOLL_NAME:
        print("[INFO] 开始训练: {}".format(b_n))
        x_train, y_train = create_model_data(b_n)
        train_model(x_train, y_train, b_n)

其中如果安装的是TensorFlow-GPU版本,那么红框中的代码主要用于调用GPU进行模型训练,如果安装的是TensorFlow-CPU版本,那么,红框内部的代码,注释掉即可;


对于我们来说,日常主要修改下面train_model.py部分代码即可


其中EarlyStopping主要用于模型达到预期效果后提前终止训练,后面跟的则是什么条件下提前终止训练,“monitor='accuracy'”指的是终止指标为准确率,“patience=10000”则是多少轮训练后终止指标未发生变化,这里可以根据大家自己的训练时间和期望进行调整

EarlyStopping(monitor='accuracy', patience=10000, verbose=2, mode='max',restore_best_weights='true')

而model.fit则是模型的训练函数,其中咱们主要调整的为训练集大小batch_size和训练轮数epochs,batch_size之所以设置为2596,是因为截止到9.17号,训练集内一共有2596条数据(也就是到双色球20090期),整体数据集较小,所以笔者就将全部数据投入训练,大家也可以根据自己的需求,去调整batch_size的大小;

model.fit(x_data, y_data, batch_size=2596, epochs=100000, verbose=1,callbacks=callbacks)

epochs则是训练轮数,因为彩票的预测,笔者发现随着轮数的增加,准确率和损失函数逐渐降低,所以设置为了十万轮,通常情况下,准确率能维持在60%以上,损失函数则在0.9左右,大家也可以继续增加训练轮数,注意不要过拟合即可;


代码全部修改完成后,点击运行,即可开始训练了(前提是已经跑出来了训练数据),聪明的小伙伴就可以尝试进行预测了,第三篇,杂学家会重点讲下预测环节,和解答大家的一些疑惑,有问题的小伙伴请积极评论提问~杂学家都会进行解答哦~

以上就是本篇的全部内容了,我们下篇再见~

相关推荐

能量空间物质相互转化途径(能量与空间转换相对论公式)

代码实现<!DOCTYPEhtml><htmllang="zh"><head>...

从零开始的Flex布局掌握(flex布局实战)

前言在现代网页设计中,布局是一个至关重要的环节,在过去的一段时间里,页面的布局还都是通过table...

flex布局在css中的使用,一看就会!

1.认识flex布局我们在写前端页面的时候可能会遇到这样的问题:同样的一个页面在1920x1080的大屏幕中显示正常,但是在1366x768的小屏幕中却显示的非常凌乱。...

前端入门——弹性布局(Flex)(web前端弹性布局)

前言在css3Flex技术出现之前制作网页大多使用浮动(float)、定位(position)以及显示(display)来布局页面,随着互联网快速发展,移动互联网的到来,已无法满足需求,它对于那些...

CSS Flex 容器完整指南(css flex-shrink)

概述CSSFlexbox是现代网页布局的强大工具。本文详细介绍用于flex容器的CSS属性:...

Centos 7 network.service 启动失败

执行systemctlrestartnetwork重启网络报如下错误:Jobfornetwork.servicefailedbecausethecontrolprocessex...

CentOS7 执行systemctl start iptables 报错:...: Unit not found.

#CentOS7执行systemctlstartiptables报错:Failedtostartiptables.service:Unitnotfound.在CentOS7中...

systemd入门6:journalctl的详细介绍

该来的总会来的,逃是逃不掉的。话不多说,man起来:manjournalctl洋洋洒洒几百字的描述,是说journalctl是用来查询systemd日志的,这些日志都是systemd-journa...

Linux上的Systemctl命令(systemctl命令详解)

LinuxSystemctl是一个系统管理守护进程、工具和库的集合,用于取代SystemV、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。通过Syste...

如何使用 systemctl 管理服务(systemctl添加服务)

systemd是一个服务管理器,目前已经成为Linux发行版的新标准。它使管理服务器变得更加容易。了解并利用组成systemd的工具将有助于我们更好地理解它提供的便利性。systemctl的由来...

内蒙古2024一分一段表(文理)(内蒙古考生2020一分一段表)

分数位次省份...

2016四川高考本科分数段人数统计,看看你有多少竞争对手

昨天,四川高考成绩出炉,全省共220,196人上线本科,相信每个考生都查到了自己的成绩。而我们都清楚多考1分就能多赶超数百人,那你是否知道,和你的分数一样的人全省有几个人?你知道挡在你前面的有多少人?...

难怪最近电脑卡爆了,微软确认Win11资源管理器严重BUG

近期,Win11操作系统的用户普遍遭遇到了一个令人头大的问题:电脑卡顿,CPU占用率异常增高。而出现该现象的原因竟然与微软最近的一次补丁更新有关。据报道,微软已经确认,问题源于Win11资源管...

微软推送Win11正式版22621.1702(KB5026372)更新

IT之家5月10日消息,微软今天推送了最新的Win11系统更新,21H2正式版通道推送了KB5026368补丁,版本号升至22000.1936,22H2版本推送了KB50263...

骗子AI换脸冒充亲戚,女子转账10万元后才发现异常……

“今天全靠你们,不然我这被骗的10万元肯定就石沉大海了。”7月19日,家住石马河的唐女士遭遇了“AI”换脸诈骗,幸好她报警及时,民警对其转账给骗子的钱成功进行止付。当天13时许,唐女士收到一条自称是亲...

取消回复欢迎 发表评论: