基于LSTM的双色球预测(二)(双色球预测模型估计与评估)
ztj100 2025-07-08 00:24 10 浏览 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左右,大家也可以继续增加训练轮数,注意不要过拟合即可;
代码全部修改完成后,点击运行,即可开始训练了(前提是已经跑出来了训练数据),聪明的小伙伴就可以尝试进行预测了,第三篇,杂学家会重点讲下预测环节,和解答大家的一些疑惑,有问题的小伙伴请积极评论提问~杂学家都会进行解答哦~
以上就是本篇的全部内容了,我们下篇再见~
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统...
- systemd是什么如何使用_systemd/system
-
systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
-
Linux系统日常巡检脚本,巡检内容包含了,磁盘,...
- 7,MySQL管理员用户管理_mysql 管理员用户
-
一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
-
1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
-
设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...
- linux系统启动流程和服务管理,带你进去系统的世界
-
Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...
- CentOS7系统如何修改主机名_centos更改主机名称
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
-
为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...
- Kubernetes 高可用(HA)集群部署指南
-
Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介...
- Linux系统systemd服务管理工具使用技巧
-
简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...
- Linux下NetworkManager和network的和平共处
-
简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
这一次,彻底搞懂Java并发包中的Atomic原子类
-
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- systemd是什么如何使用_systemd/system
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
- 7,MySQL管理员用户管理_mysql 管理员用户
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
- linux系统启动流程和服务管理,带你进去系统的世界
- CentOS7系统如何修改主机名_centos更改主机名称
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)