建立配置文件
在本地项目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 osimport numpy as npimport pandas as pdfrom config import from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import LSTM, Densefrom tensorflow.keras.optimizers import Adamfrom tensorflow.keras.utils import to_categoricalfrom tensorflow.keras.callbacks import EarlyStoppingimport 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_datadef 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旁边,大家也可以连续增加演习轮数,把稳不要过拟合即可;
某一位双色球演习结果
代码全部修正完成后,点击运行,即可开始演习了(条件是已经跑出来了演习数据),聪明的小伙伴就可以考试测验进行预测了,第三篇,杂学家会重点讲下预测环节,和解答大家的一些迷惑,有问题的小伙伴请积极评论提问~杂学家都会进行解答哦~
以上便是本篇的全部内容了,我们下篇再见~