参考了其他大神的代码,通过历史数据训练线性回归模型,然后给出预测值,但是这预测看起来并不那么准,只是应用线性回归模型的一个示例,如果需要更好更精确的结果,还需要不断地调整,不断地尝试各种算法模型,相信总有一款模型能靠近500W俱乐部。
print('预测开始了')
"""取读历史数据,指定标识"""
def get_lotto_data(data, lotto, lotto_id):
data['lotto_id'] = lotto_id
X = []
Y = []
# single_square_feet, single_price_value
for s, p in zip(data['lotto_id'], data[lotto]):
X.append([float(s)])
Y.append(float(p))
return X, Y
# 训练线性回归模型
def linear_model_test(X, Y, predict_value):
regr = linear_model.LinearRegression()
regr.fit(X, Y)
predict_outcome = regr.predict(predict_value)
predictions = {}
predictions['intercept'] = regr.intercept_
predictions['coefficient'] = regr.coef_
predictions['predicted_value'] = predict_outcome
return predictions
"""使用线性回归推测中奖号码"""
def get_predicted_num(file, lotto, lotto_id, num):
X, Y = get_lotto_data(file, lotto, lotto_id)
predict_value = [[33]]
result = linear_model_test(X, Y, predict_value)
print("num", num,
'Intercept value', result['intercept'],
'Coefficient', result['coefficient'],
'Predicted value', result['predicted_value'])
columns = {
'date': str,
'id': str, # 期数
'r1': int, # 红1
'r2': int, # 红2
'r3': int, # 红3
'r4': int, # 红4
'r5': int, # 红5
'r6': int, # 红6
'b1': int, # 蓝1
}
LoadPath = f'DoubleBall.xlsx'
book=load_workbook(LoadPath, data_only=True)#加载已有Excel文档
sheet_result=book['Sheet']
results = []
cnt = 0
for i in sheet_result:
if cnt > 0:
dit = {}
cnt = 1
dit['id'] = i[1].value
dit['date'] = i[0].value
dit['r1'] = i[2].value
dit['r2'] = i[3].value
dit['r3'] = i[4].value
dit['r4'] = i[5].value
dit['r5'] = i[6].value
dit['r6'] = i[7].value
dit['b1'] = i[8].value
results.append(dit)
cnt+=1
df = pd.DataFrame(columns=columns, data=results)
df = df.sample(100)
# 使用线性回归模型进行预测
get_predicted_num(df, 'r1', 1, 5) # 预测红球1
get_predicted_num(df, 'r2', 2, 10) # 预测红球2
get_predicted_num(df, 'r3', 3, 15) # 预测红球3
get_predicted_num(df, 'r4', 4, 20) # 预测红球4
get_predicted_num(df, 'r5', 5, 24) # 预测红球5
get_predicted_num(df, 'r6', 6, 29) # 预测红球6
get_predicted_num(df, 'b1', 7, 9) # 预测蓝球1
print('预测结束了')