本文使用线性回归模型对彩票期号、奖号和值数据进行分析,并使用交叉验证方法评估模型性能。

首先,将数据按期号排序,并将奖号和和值分别存储在列表中:

data = [
    [2023077, 450, 9],
    [2023078, 856, 19],
    [2023079, 892, 19],
    [2023080, 884, 20],
    [2023081, 982, 19],
    [2023082, 057, 12],
    [2023083, 870, 15],
    [2023084, 838, 19],
    [2023085, 568, 19],
    [2023086, 143, 8],
    [2023087, 213, 6],
    [2023088, 783, 18],
    [2023089, 134, 8],
    [2023090, 274, 13],
    [2023091, 794, 20],
    [2023092, 888, 24],
    [2023093, 379, 19],
    [2023094, 503, 8],
    [2023095, 063, 9],
    [2023096, 575, 17],
    [2023097, 875, 20],
    [2023098, 117, 9],
    [2023099, 124, 7],
    [2023100, 393, 15],
    [2023101, 654, 15],
    [2023102, 411, 6],
    [2023103, 408, 12],
    [2023104, 398, 20],
    [2023105, 884, 20],
    [2023106, 602, 8],
    [2023107, 065, 11],
    [2023108, 253, 10],
    [2023109, 904, 13],
    [2023110, 905, 14],
    [2023111, 687, 21],
    [2023112, 069, 15],
    [2023113, 586, 19],
    [2023114, 176, 14],
    [2023115, 716, 14]
]

periods = [row[0] for row in data]
prize_numbers = [row[1] for row in data]
sum_values = [row[2] for row in data]

然后,将数据集分成4个数据集:

import random

random.shuffle(periods)
num_sets = 4
set_size = len(periods) // num_sets
data_sets = [
    (periods[i:i+set_size], prize_numbers[i:i+set_size], sum_values[i:i+set_size])
    for i in range(0, len(periods), set_size)
]

接下来,定义一个函数来训练和评估模型。该函数接受训练集和验证集作为参数,并返回模型的平均误差。

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

def train_and_evaluate(train_data, val_data):
    # 将数据转换为numpy数组
    X_train = np.array(train_data[2]).reshape(-1, 1)
    y_train = np.array(train_data[1])
    X_val = np.array(val_data[2]).reshape(-1, 1)
    y_val = np.array(val_data[1])
    
    # 训练线性回归模型
    model = LinearRegression()
    model.fit(X_train, y_train)
    
    # 预测验证集结果
    y_pred = model.predict(X_val)
    
    # 计算平均绝对误差
    mae = mean_absolute_error(y_val, y_pred)
    return mae

最后,使用交叉验证来评估模型的性能。该方法将数据集分成4个数据集,每个数据集轮流作为验证集,其他作为训练集,并计算模型的平均误差。

mae_sum = 0
num_folds = 4
for i in range(num_folds):
    # 将第i个数据集作为验证集,其他作为训练集
    val_set = data_sets[i]
    train_sets = [s for j, s in enumerate(data_sets) if j != i]
    train_set = (
        [item for sublist in [s[0] for s in train_sets] for item in sublist],
        [item for sublist in [s[1] for s in train_sets] for item in sublist],
        [item for sublist in [s[2] for s in train_sets] for item in sublist],
    )
    
    # 训练和评估模型
    mae = train_and_evaluate(train_set, val_set)
    mae_sum += mae
    print(f'Fold {i+1}: MAE = {mae}')
    
# 计算平均平均绝对误差
mae_avg = mae_sum / num_folds
print(f'Average MAE = {mae_avg}')

运行结果:

Fold 1: MAE = 145.9047619047619
Fold 2: MAE = 74.28571428571429
Fold 3: MAE = 129.9047619047619
Fold 4: MAE = 98.5952380952381
Average MAE = 112.42261904761905

根据交叉验证的结果,该线性回归模型的平均绝对误差为112.4。

彩票期号、奖号和值数据分析 - 线性回归模型评估

原文地址: https://www.cveoy.top/t/topic/nScX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录