数学建模预测模型实例(三)---双色球概率预测模型

双色球概率预测模型

数学建模预测模型实例(一)—大学生体测数据模型
数学建模预测模型实例(二)—表白墙影响力量化模型
python预测算法—线性回归
双色球概率预测模型

前言

最近新晋彩民佩瑞对于双色球产生了极为浓厚的兴趣,在买过几注随机号码中奖无果后,决心潜心修炼,钻研一个比较靠谱的预测方法!所以有了这篇文章,文章思路及结果仅供娱乐,请勿当真!

建模思路

在产生这个想法之后我首先查阅了网络上各种各样的双色球预测模型,发现了几类具有代表性的:

1.基于神经网络的回归预测模型
2.基于LSTM的预测模型
3.基于深度学习的预测模型

看到这三种预测模型是不是觉得很高深,没错!我也是这样的感觉!所以我又开始了新一轮的资料搜索,这次去详细的了解了一下有关双色球的概率知识。

有关双色球的概率知识

双色球由红球和蓝球两部份组成,红球是由01到33个号码中选择,蓝球是由01到16个号码中选择。每次开奖在红色球中随机摇出六个红号,在蓝球中随机摇出一个蓝号。
在这里插入图片描述

这里以一等奖为例,双色球可以简单的理解为一次不放回抽样,因此计算其概率需要用到高中数学的概率计算:
在这里插入图片描述
从这里不难看出,1700万分之一的一等奖几率是有多么渺茫;而且双色球作为一个完全随机的过程,我们从中得到的信息是十分有限的,只能从历史数据反映出来的大致概率分布入手去建立模型,而由于各类学习算法的操作对象都是连续变化或者与时间序列高度
相关的数据,双色球并不满足这个条件。

因此我最终没有应用或改进现有的算法去预测结果,反倒是选择了概率,这个唯一看起来不那么玄学的方向。

如果只考虑概率这个方向,那么就不得不与日期产生联系,即在每个特定日期下双色球每一种可能组合的中奖概率是否会不同?由此我们得到了我们的科学问题。

探索性数据分析

至此确定了大方向为概率之后,我立马开始着手观察数据。
此次实验获取到的数据为2003-2020.8月的双色球历史一等奖的中奖数据。
在这里插入图片描述

数据预处理

经过观察,我认为这样的数据呈现方式不够直观,因此我选择将七个球的中奖数据分割开,由于每一种球的每一次抽取都有33(红)或16(蓝)种可能,我将每一可能作为一列,以1,0来表示是否中奖,具体如下图(以红色1号球为例)。

def process_df(df_w_1):'''通过这一步将每一个球的历史获奖数据按照33(红)/16(蓝)种可能性进行二元归一'''ball = np.arange(1,34)for b in ball:name = str(b)+'号'l=[]for i in range(len(df_w_1)):if int(df_w_1.iloc[i,1])==b:l.append(1)else:l.append(0)df_w_1[name]=pd.DataFrame(l)return df_w_1

在这里插入图片描述
1号-33号这33种可能性在每一个日期下的中奖情况都被表示出来了!

历史趋势可视化

为了得到进一步的建模思路,我选择对历史数据中的每个球的获奖号码进行可视化的分析。结果如下(这里只选取其中四个球的结果进行展示)。

def draw(df_w_1):'''数据探索阶段获取7个球33/16种结果的历史获奖趋势'''sum_list=[]ball = np.arange(1,34)for b in ball:sum_b = df_w_1.iloc[:,b+1].sum()sum_list.append(sum_b)print(sum_list)plt.plot(ball,sum_list,'b.-')plt.xlabel('ball number')   plt.ylabel('count')plt.show()

在这里插入图片描述
看到上面的图表之后,我又一次肯定了概率这条路一定能走通!

上图只选取了三个红球和一个蓝球的历史数据趋势作为展示,横坐标为一个球可能的33(红)或16(蓝)种结果,纵坐标为每一种可能结果中奖的计数。上图很好的反映出了在大量历史数据中的确存在一定的中奖趋势,由此可导致每种球每一种可能的中奖概率不同。

到这里我们还是没有一个清晰可行的具体思路,所以我想到我们不应该只关注中奖结果,那些没中奖的结果同样值得注意,除此之外还有日期与它们的关系。

日期与是否获奖可视化

考虑到数据点数量太多可能不利于我们观察,在这里我随机选取了2581条数据中的100条进行接下来的数据探索。

import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False  
sns.set(font='SimHei')
data['month']=data['日期'].dt.month
data['day']=data['日期'].dt.day
data1=data[['day','3号']]
train_,test_ = train_test_split(data1,test_size=100)
sns.catplot(x='3号',y='day',data=test_)

在这里插入图片描述
上图展示的是1号红球的号码3的获奖结果与我们的天数的分布。

这张图是不是看着很像一个聚类数据?没有获奖的结果与天数并没有呈现这样的分群分布,因此观察到这种不寻常现象的我决定深入下去。

既然获奖结果与天数呈现一定程度上的分群,那么如果我们可以利用这种分群把一个月31天划分为几个区间,通过区间内获奖概率进行赋值,再加上每一天的获奖概率,那么一个月31天就被划分为了31个方格,每一个方格都有自己的分值,分值越高则该号数获奖可能性越高,换言之,我们的模型思路出来了!

系统思路

在这里插入图片描述
在这里还想解释一下p1,因为我们的训练数据是随机选取的100条数据,所以这里的天数我们暂时通过p1打一个标记(现在姑且认为是幸运数字的奖励吧!)

好了,现在系统思路都出来了!我们就开始代码实现吧!

代码实现

选定聚类个数k

def select_k(x):'''聚类时选定最佳聚类个数k'''SSE=[]k_=[]for k in range(1, 9):estimator = KMeans(n_clusters=k)estimator.fit(x)SSE.append(estimator.inertia_)for i in range(len(SSE)):if i+1<len(SSE):if SSE[i]-SSE[i+1]<=20:k_.append(i+1)return k_[0]

按照三个标准进行赋分

def process_data(namef,test_,data):'''按照三个标准进行赋分'''num_list=[]everyday_p=[]day_data = pd.DataFrame(pd.read_excel(r'C:\Users\15643\Desktop\history_data.xlsx',sheet_name='Sheet1'))for m in range(len(namef)):try:na = namef[m]test_na = test_.loc[test_[na]==1]x=test_na['day']x = np.array(x)x = x.reshape(-1, 1)k = select_k(x)####kmeans聚类kms = KMeans(n_clusters=k)kms.fit(x)day_list = np.arange(1,32)day_list_ = day_list.reshape(-1, 1)y = kms.predict(day_list_)  ####对于训练数据里的天数赋值p1=0.1day_data_col = namef2[:31]day_data.columns = day_data_colfor l in range(len(x)):   for j in range(0,31):if x[l]==j+1:day_data.iloc[m,j]=1.1    ###计算区间获奖概率p2并赋值给区间内每一天数###计算每一天获奖概率p3for day in day_list:c = data.loc[data['day']==int(day)]num = len(c)num_list.append(num)y  =pd.DataFrame(y)y['day']=pd.DataFrame(day_list)y['num']=pd.DataFrame(num_list)y.columns=['classify','day','num']everyday = y['num']for i in range(k):l=y.loc[y['classify']==i]l_num  =l['num'].sum(axis=0)l_f = l_num/y['num'].sum(axis=0)y['classify']=y['classify'].replace(i,l_f)      cls = y['classify']for i in range(31):everyday_p.append(everyday[i]/y['num'].sum(axis=0))###输出每一天数对应的概率总和p=p1+p2+p3day_data.iloc[m,i]=day_data.iloc[m,i]+cls[i]+everyday_p[i]except:passreturn day_data

调用之前的所有函数

def data(data,data_w1):'''调用之前的所有函数'''data['month']=data['日期'].dt.monthdata['day']=data['日期'].dt.daydata = data.drop(['日期'],axis=1)name = data.columnsnamef=name[1:17]train_,test_ = train_test_split(data,test_size=100)#在总共2581个数据中随机选取100个数据进行聚类分析day_f = process_data(namef,test_,data)return day_f

输出结果

data_w1 = process_df(df_w_1)
data_w2 = process_df(df_w_2)
data_w3 = process_df(df_w_3)
data_w4 = process_df(df_w_4)
data_w5 = process_df(df_w_5)
data_w6 = process_df(df_w_6)
w1=data(data_w1)
w2=data(data_w2)
w3=data(data_w3)
w4=data(data_w4)
w5=data(data_w5)
w6=data(data_w6)
def select_whiteb_ball(day):'''根据输入日期输出最佳组合的函数'''result=[]col=int(day)w1_s = w1.iloc[:,col]w2_s = w2.iloc[:,col]w3_s = w3.iloc[:,col]w4_s = w4.iloc[:,col]w5_s = w5.iloc[:,col]w6_s = w6.iloc[:,col]b_s = b.iloc[:,col]w1_s=np.array(w1_s)w2_s=np.array(w2_s)w3_s=np.array(w3_s)w4_s=np.array(w4_s)w5_s=np.array(w5_s)w6_s=np.array(w6_s)b_s = np.array(b_s)w1f=np.argwhere(w1_s == w1_s.max())w2f=np.argwhere(w2_s == w2_s.max())w3f=np.argwhere(w3_s == w3_s.max())w4f=np.argwhere(w4_s == w4_s.max())w5f=np.argwhere(w5_s == w5_s.max())w6f=np.argwhere(w6_s == w6_s.max())bf=np.argwhere(b_s == b_s.max())result.append([int(w1f)+1,int(w2f)+1,int(w3f)+1,int(w4f)+1,int(w5f)+1,int(w6f)+1,int(bf)+1])print('推荐您的最佳组合为:{}'.format(result))

最终结果

在这里插入图片描述

结果分析

根据最后的结果我发现
p1=0.1
0.1<p2<0.2
p3<0.1
所以我们对这三个赋分标准进行重要性排序

1.聚类区间中每种球每种可能性获奖概率p2
2.幸运数字加持p2
3.每一天每种球每种可能性获奖概率p3

最后结果选择就是以输入天数下所对应的各球各可能性的得分,得分越高,说明该种可能越有可能获奖。

模型不足

1.对于无法找到聚类个数k的各球各可能性的数据,现阶段还无法进一步分析
碍于本人知识储备不足,实乃大憾!
2.结果可能相对固定,不像应用成熟算法的模型可以有较强的灵活性
3.模型还是不靠谱!仅供娱乐!哈哈哈哈!希望大家玩的开心!

数据及源码获取 提取码:bwlw
最后希望大家看完这篇文章后能多多支持奇趣多多!
你们的关注是对我们最大的鼓励!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC 工具推荐:利用 AI 提高工作效率的利器

人工智能&#xff08;AI&#xff09;正在改变我们的生活&#xff0c;使我们的工作更加高效和智能化。在这个快速发展的领域中&#xff0c;有许多 AI 实用工具可以帮助我们更好地完成工作。在未来熟练使用各种 AI 工具优化你的工作流并提高工作效率将是每个人的必备技能&#xf…

Ubuntu Go语言环境配置【GPT-4版】

目录 go语言的培训网课安装goGPT-4给出的过程在VSCode里怎样正确配置好Go的调试相关设置&#xff1f;如果我在Visual Studio Code中安装Go语言的相关工具总是失败怎么办&#xff1f;我已重启Visual Studio Code&#xff0c;接下来应该怎样检查日志&#xff1f;如果我还是不能成…

Monica - 你的 GPT-4 人工智能助手

Monica介绍 官方地址&#xff1a;https://monica.im/?cX0OHBN1S &#xff08;仅限今天&#xff0c;通过这里注册可免费获取100次Monica查询&#xff09; Monica 是一款由 ChatGPT API 提供支持的扩展程序&#xff0c;它可以与您讨论任何事情&#xff0c;使用 80 多个模板生成文…

初学者使用Auto-GPT入门:设置和使用

初学者使用Auto-GPT入门&#xff1a;设置和使用 简介&#xff1a;1. 快速演示2. 要求3. 设置OpenAI使用限制&#xff08;可选&#xff09;4. 安装Python5. 安装Git6. 安装 virtualenvwrapper&#xff08;可选&#xff09;6.1 使用 pip&#xff0c;您可以轻松地在 Python 环境中…

最近热门话题-Auto GPT 初学者Auto GPT 入门:设置和使用

Auto-GPT 是一个实验性的开源应用程序&#xff0c;展示了著名的 GPT-4 语言模型的功能。 它使用 GPT-4 执行复杂的任务并实现目标&#xff0c;而无需太多人工输入。 Auto-GPT将OpenAI的GPT模型的多个实例链接在一起&#xff0c;允许它做一些事情&#xff0c;比如在没有帮助的…

GPT国内使用

国内可用的 ChatGPT 替代 列表 功能和使用 顺便推荐 列表https://chatgpt.qdymys.cn/ &#xff1a;三小时只能用10次 https://alllinkai.com/&#xff1a;体验完&#xff0c;要登录&#xff0c;不推荐 https://gpttalk.live/ &#xff1a;每天限制使用次数 https://chatgpt-…

信息收集----浏览器,网络空间搜索引擎

目录 一.浏览器搜索 1.什么是Google Hacking 2.高级搜索 3.示例 4.工具 二.网络空间搜索引擎 1.什么是网络空间搜索引擎 2.Shodan的使用 3.Censys&#xff0c;Zomeye,Fofa介绍 1.Censys 2.zoomeye 3.fofa 4.总结对比 5.基于网络空间搜索引擎的工具 一.浏览器搜索 1…

VC++实现双人对决的围棋程序,阿尔法狗围棋

可以双人对决的VC围棋程序&#xff0c;送给我梦中的情人。虽然程序不很复杂&#xff0c;但必竟是我自己亲手写噢&#xff0c;而且还得到了女朋友的夸张&#xff0c;通过编写这个小程序&#xff0c;让我对VC有了更深层的了解&#xff0c;想要的下载。游戏打开后可以选择适合15、…

训练策略网络和价值网络

阿尔法狗2016版本使用人类高手棋谱数据初步训练策略网络&#xff0c;并使用深度强化学习中的REINFORCE算法进一步训练策略网络。策略网络训练好之后&#xff0c;使用策略网络辅助训练价值网络。零狗&#xff08;AlphaGo Zero&#xff09;使用MCTS控制两个玩家对弈&#xff0c;用…

计算机永远无法超越人类——从李世石与阿尔法的人机大战中想到的

转载请注明出处&#xff1a;http://blog.csdn.net/dongdong9223/article/details/52214884 本文出自【我是干勾鱼的博客】 大家好&#xff01;我是海东。前一阵子李世石与谷歌阿尔法的围棋人机大战引起了大家的广泛关注&#xff0c;今天我们就来聊聊计算机与人类的较量。 首先海…

机巧围棋(CleverGo)项目总览及介绍

1. 项目简介 2016年3月&#xff0c;阿尔法狗以4:1战胜围棋世界冠军李世石。自此开始&#xff0c;深度强化学习受到空前的关注并成为AI领域的研究热点&#xff0c;彻底引爆了以深度学习为核心技术的第三次人工智能热潮。 机巧围棋利用PythonPygamePaddlePaddle基于AlphaGo Zer…

算法高级(45)-阿尔法狗到底有多厉害?

1997年5月11日&#xff0c;一台名为“深蓝”的超级电脑将棋盘上的一个兵走到C4位置时&#xff0c;人类有史以来最伟大的国际象棋名家卡斯帕罗夫不得不沮丧地承认自己输了。世纪末的一场人机大战终于以计算机的微弱优势取胜。 当然&#xff0c;国际象棋这样的棋类比赛&#xff…

什么是阿尔法和贝塔?

不管是买基金进行投资的基民&#xff0c;还是专业挑选基金经理的各种机构&#xff0c;都会面临这么一个问题&#xff1a; XX基金在过去X年涨/跌了X%&#xff0c;它的表现如何&#xff1f;算好&#xff0c;还是不好&#xff1f; 要把这个问题讲清楚&#xff0c;我们就需要向大…

谷歌计算机围棋程序,阿尔法狗教你下棋 谷歌上线AlphaGo围棋教学工具

【PConline 资讯】看起来AlphaGo在围棋界真的是无敌了&#xff0c;如果这么强大聪明的AI变成了围棋老师&#xff0c;对于人类来说是不是又是另一种体验呢&#xff1f;12月13号&#xff0c;谷歌旗下的DeepMind上线了这款在线AlphaGo围棋教学工具(点击此访问)。放心点进去&#x…

人工智能围棋战胜李世石,人工智能围棋阿尔法狗

AI让围棋失去了很多魅力&#xff0c;人工智能对围棋游戏的影响有多大&#xff1f; 人工智能对围棋影响是两面性的&#xff0c;围棋本身就是一种娱乐方式&#xff0c;并不一定是说人工智能完胜人类之后就会让这种娱乐消失。我们可以通过人工智能学习到更精的棋艺&#xff0c;而…

阿尔法围棋是人工智能吗,围棋智能机器人阿法狗

阿尔法狗什么意思? 阿尔法狗是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能机器人。其英文名为AlphaGo&#xff0c;音译中文后戏称为阿尔法狗。 人工智能围棋项目&#xff1a;小发猫 阿尔法狗其主要工作原理是“深度学习”。“深度学习”是指多层的人工神…

阿尔法狗与机巧围棋的网络结构

阿尔法狗(AlphaGo)的意思是“围棋王”&#xff0c;俗称“阿尔法狗”&#xff0c;它是世界上第一个打败人类围棋冠军的AI。2015年10月&#xff0c;阿尔法狗以5 : 0战胜了欧洲围棋冠军樊麾二段&#xff0c;在2016年3月&#xff0c;阿尔法狗以4 : 1战胜了世界冠军李世石九段。2017…

围棋智能机器人阿法狗,阿尔法狗机器人围棋

第一个战胜围棋世界冠军的人工智能程序是什么&#xff1f; 阿尔法狗(AlphaGo)是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能程序&#xff0c;由谷歌(Google)公司的团队开发。其主要工作原理是“深度学习”。 人工智能围棋项目&#xff1a;小发猫 2017年5月…

阿尔法围棋击败人类是计算机在那方面的应用,阿尔法围棋战胜人类:人工智能又一胜利...

计算机下棋的思考模式 现在主流弈棋计算机的基本“思考模式”很简单&#xff0c;就是对当前局面下的每一种合法走法所直接导致的局面进行评估&#xff0c;然后选择“获胜概率”最高的局面所对应的那个走法。也就是说&#xff0c;“准确评估给定局面的胜率”是主流弈棋计算机的核…

spring-boot3 重定向(状态码:302)问题(无论访问那个接口都会被重定向到 【/login】登录界面)

问题描述 今天使用spring-boot做了热重载以后出现了一个问题&#xff0c;我无论访问那个接口都会导致接口被重定向到下面这个界面 地址是 &#xff1a;“localhost:/login” chatGPT解决方式 问了一下 chatGPT,下面是他给我的答案&#xff08;没能解决&#xff09;&#xf…