目录
- 一、数据标准化
- 二、预测代码
- 三、后续
一、数据标准化
首先,我们需要对原始数据进行处理,将其转换为可用于机器学习的格式。我们可以将开奖号码中的红球和蓝球分开,将其转换为独热编码,然后将其与期数一起作为特征输入到机器学习模型中。
这里的数据集是我找到的2017年至今的数据集
import re
import csv
# 定义正则表达式
pattern = re.compile(
r'(\d{7})双色球开机号码:红球:(\d{2}),(\d{2}),(\d{2}),(\d{2}),(\d{2}),(\d{2}) 蓝球:(\d{2}) 开奖号:(\d{2}) (\d{2}) (\d{2}) (\d{2}) (\d{2}) (\d{2}) \+ (\d{2})')
# 读取 test.txt 文件
with open('test.txt', 'r',encoding="utf-8") as f:
lines = f.readlines()
# 初始化数据列表
data = [['期数', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球', '开奖红球1',
'开奖红球2', '开奖红球3', '开奖红球4', '开奖红球5', '开奖红球6', '开奖蓝球']]
# 解析每一行数据
for line in lines:
match = pattern.match(line)
if match:
# 提取匹配结果
qishu = match.group(1)
shijihongqiu = [match.group(i) for i in range(2, 8)]
shijilanqiu = match.group(8)
kaijianghongqiu = [match.group(i) for i in range(9, 15)]
kaijianglanqiu = match.group(15)
# 将提取到的数据添加到 data 列表中
data.append([qishu] + shijihongqiu + [shijilanqiu] + kaijianghongqiu + [kaijianglanqiu])
# 将数据写入 csv 文件
with open('lottery.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
二、预测代码
接下来,我们需要选择一个机器学习模型进行预测。由于该数据集中没有常规的y参数,因此我们可以采用无监督学习的方法,对球号之间的关系进行建模,然后根据建好的模型进行预测。
常见的无监督学习算法包括聚类和降维算法。聚类算法可以将数据集中的数据分为不同的组别,每个组别中的数据具有相似的特征。降维算法可以将高维数据降低到低维空间,以便更好地进行可视化和处理。
在这里,我们可以采用聚类算法,例如k-means算法,来将球号进行聚类。具体步骤如下:
读取数据集,将红球1到红球6的6个特征作为X。
对X进行标准化处理,使得每个特征的均值为0,标准差为1。
使用k-means算法对X进行聚类,将样本划分为k个不同的组别。
对于2023048期的数据,提取红球1到红球6的6个特征作为X,并进行标准化处理。
将2023048期的数据输入到k-means模型中,预测它所属的组别。
根据模型预测出的组别,从训练集中找到同一组别中的数据,并计算这些数据中蓝球出现的频率,将频率最高的蓝球作为预测结果。
但是这里并不使用聚类算法,因为我发现写到最后开机号码是提前给出来的,所以我们用开机号码和开奖号码进行分析。
使用随机森林算法进行预测,下面是Python代码实现:
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
# 读取数据
data = pd.read_csv('lottery.csv',encoding="gbk")
# 提取特征和标签
X = data.drop(['期数', '开奖红球1', '开奖红球2', '开奖红球3', '开奖红球4', '开奖红球5', '开奖红球6', '开奖蓝球'], axis=1)
y = data[['开奖红球1', '开奖红球2', '开奖红球3', '开奖红球4', '开奖红球5', '开奖红球6', '开奖蓝球']]
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 在测试集上评估模型
from sklearn.metrics import mean_squared_error
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print('Mean squared error:', mse)
# 使用模型进行预测
predict_data = pd.DataFrame({
'红球1': [2],
'红球2': [10],
'红球3': [13],
'红球4': [17],
'红球5': [22],
'红球6': [26],
'蓝球': [1]
})
predict_result = model.predict(predict_data)
rounded_result = np.round(predict_result)
print('预测结果:', rounded_result)
结果如下:
(注:本代码纯属娱乐,投资有风险)
三、后续
中了五块钱