第114天: 三木板模型算法项目实战

简介: 第114天: 三木板模型算法项目实战

机器学习


本篇同样是机器学习,虽然没有用到python中已有的算法和函数,但借鉴了机器学习中的思路。


这篇机器学习建模的思路比较新颖,模型评估也比较独特。旨在引导广大读者借鉴,举一反三。


只是通过足球领域举例,可扩展到其他任何领域,达到抛砖引玉的目的。


机器学习建模


建模思路:选取三家菠菜公司的主队胜赔率(每个公司都会给出初始胜、平、负三个赔率)作为组合对象与历史数据的三家赔率组合比较。


统计出历史比赛结果标签y/n的数量,y代表主队获胜,n代表主队不胜(即主队平或负)。


并输出符合条件“y>nX3或n>yX3”的结果(3为参数,目前尚未调整过此参数)。如果暂未理解思路,也不用担心,马上将结合实例讲解。


这里有两处三,为什么取值为三,这依据了肘部法则(畸变程度的改善效果下降幅度最大的位置就是肘部),而且经过实践证明了其他诸如二、四、五等值在预测结果准确率上远不如三。可以参考文末的论文。


举例:以下是爬虫爬取的历史数据,每个值都是公司给出的主队第一个赔率也就是获胜的赔率:(以下均以存储在Excel为例)


比赛场次    ysb li  b5  sna wl  ms  ao  pin y为胜 联赛类型20191202周日040 1.76  1.75  1.75  1.7 1.78  1.75  1.67  1.82  n  挪超 20191202周日039 1.81  1.7 1.83  1.75  1.8 1.8 1.75  1.75  n  挪超 20191202周日038 1.53  1.57  1.5 1.5 1.52  1.53  0 1.59  y  挪超 20191202周日037 2.03  0 2.1 2.05  2.05  2.03  1.97  2.27  y  挪超 20191202周日036 1.79  1.87  1.75  1.7 1.78  1.79  1.7 1.99  y  挪超 20191202周日035 2.7 2.4 2.88  2.6 2.55  2.58  2.55  2.63  n  挪超 20191202周日031 2.23  2.25  2.25  2.3 2.2 2.25  2.12  2.29  n  德甲 20191202周日029 1.72  1.91  1.73  1.85  1.88  1.85  1.72  1.89  y  英超 20191202周日028 1.53  1.5 1.5 1.5 1.5 1.49  1.48  1.51  y  俄超 20191201周日024 2.25  2.25  2.15  2.3 2.25  2.24  0 2.3 n  西甲 20191201周日023 1.66  1.7 1.67  1.7 1.67  1.69  1.53  1.71  y  德甲

下边是未来要预测的一场比赛:


20190920周四   2.14     2.15    2.1     2.1     2.2     2.1     2.08   2.12            欧联杯


三木板模型算法


选取未来这场比赛中8个特征中的任何三个特征组合(如2.14,2.15,2.1)与历史数据所有行中对应特征(易胜博、立博、bet365)组合进行比对。


发现三个特征值完全相同就统计res列比赛结果y或n的数量。循环其他任意三个特征组合,如(ysb,li,sna)与历史上所有(ysb,li,sna)做精确匹配。


记录当前这场欧联杯比赛在这个组合赔率上历史比赛主队获胜的场次c1和主队不胜的场次c2,如果c1>3倍的c2或c2>3倍的c1,则记录,其他同理,一直到取完56(C83)种组合为止。


也就是说如果历史数据中存在组合对象结果y大于3倍的n时,记录。或n大于3倍的y时,也同样记录。最后根据综合结果来预测未来的这场比赛可能出现的比赛结果。


实际结果  信心指数  预测结果  2018.1-至今历史数据 2018.1-至今:欧洲数据  2018.5-至今y  1.34    y             ,lwa_yes_8_2


以上边未来预测的那场比赛为例,最后三列是计算预测结果,其中最后一列得到的结果是lwa_yes_8_2,表示在(li,wl,ao)这三个赔率组合与历史数据比较时,


有8场比赛对应的这三个赔率与这场比赛的赔率相同且结果为主队获胜。有2场比赛对应的这三个赔率与这场比赛相同且结果为主队不胜。


那么yes代表主队获胜,在预测结果列输出y,获胜的信心指数为(8-2X3)X权重,权重会在下边评估模型中讲到。


然而在2018.1-至今历史数据和2018.1-至今:欧洲数据两个阶段的历史数据中,没有输出的结果,表明任何三个赔率的组合在历史数据中都没有主队胜和不胜结果超出3倍的情形,所以不记录。


评估模型


评估模型的建立是为了对建立的机器学习模型进行有效评估,对预测正确的部分进行加强学习,对预测错误的部分进行权重调整,从而达到完善模型的目的。


建立评估模型,旨在选择信心场次,信心场次代表预测的多个比赛中哪些的预测结果出现概率较大。


原理:列出所有C83共56种组合对象,每一列代表一个组合。


用正向激励和反向激励统计出哪些组合对比赛结果有较大的影响,作为今后选择信心场次的优先依据。



比赛场次       结果 pre-ok    sum ol5 olin  olwl  olw olao  ol10  o5in  o5wl ...Sum(正向激励)       1为预测正确    373 293 451 363 138 457 353 391<0(反向激励)       87  50  67  65  31  61  55  8720190224周日030 y 1   11        3 1     1   y     11        5       1   y     9       2 2     120190224周日027  y 0   -19                   y     -15                   y     -24     -4      -3


第一行为赔率组合(56个组合);


第二行为正向激励数量,即预测结果正确时各个赔率组合的数量,此时场次对应的值为正数,E列373的公式求和为“=SUM(E4:E65471)”,是所有已预测比赛中(ao,li,b5)组合预测正确的数量。



第三行为反向激励数量,即预测结果错误时各个赔率组合的数量,E列50的公式求和为“=SUM(E4:E65471)”,是所有已预测比赛中(ao,li,b5)组合预测错误的数量。


第四行的最后几列的3、1、1,计算公式为历史数据中比赛结果标签y/n中“多”的数量减去3倍“少”的数量C多-C少X3,如3=4-1X1(历史上存在4场比赛olw三个赔率与这场比赛相同且主队获胜)。


此时场次对应的值为负数;如第九行的-4、-3,计算公式为历史数据中比赛结果标签y/n中多的数量减去3倍少的数量取负值。-(C多-C少X3)。


为进一步量化模型,新增了信心指数中的权重:权重=(>0的数量/sum总数)


res 信心指数  预测结果  2018.1-至今历史数据 2018.1-至今:欧洲数据  2018.5-至今y  1.34  y       ,lw10_yes_8_2y  9.10  y ,iw10_yes_6_0   ,iw10_yes_4_0   ,iw10_yes_4_0


changci   lw10  liao10  5inwl 5inw  5inao 5wlw  5in10 ...sum    151 62  220 279 66  468 166 >0    133 41  143 173 47  237 116 <0    65  13  49  74  15  96  57  权重    0.67  0.76  0.74  0.70  0.76  0.71  0.67


以第一行为例,这场比赛的信心指数={历史数据中主队获胜数量-(主队不胜的数量X3) X 对应的权重}:(8-2X3)X 0.67 = 1.34。


评估模型能够进一步量化数据从而得出权重,而这个权重是随着历史数据增加而实时调整的。


同时,评估模型中使用了bagging算法思想,以历史数据中不同阶段作为不同的训练集,例如2018.1-至今历史数据、2018.5-至今等等,分别以不同训练集进行预测。


然后将几个预测结果综合,最终再通过机器学习中的集成学习思想,取最多的结果作为最终预测结果。


所以模型评估对于机器学习非常重要,主要起两个作用:第一、量化权重;第二、反向传播思想改善模型。本篇就很好的完成了这两个作用。


反向传播算法


接下来跟大家详细介绍一下反向传播算法。至于为什么会提出反向传播算法,我直接应用梯度下降(Gradient Descent)不行吗?想必大家肯定有过这样的疑问。


答案肯定是不行的,纵然梯度下降神通广大,但却不是万能的。梯度下降可以应对带有明确求导函数的情况,或者说可以应对那些可以求出误差的情况。


比如逻辑回归(Logistic Regression),我们可以把它看做没有隐层的网络;但对于多隐层的神经网络,输出层可以直接求出误差来更新参数。


但其中隐层的误差是不存在的,因此不能对它直接应用梯度下降,而是先将误差反向传播至隐层,然后再应用梯度下降。


其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助,因此反向传播算法可以说是梯度下降在链式法则中的应用。


在本文中对反向传播的应用则是权重的反向修正,将历史上三个赔率组合对象出现的次数作为total_count,出现yes(主队获胜)数量作为y_count(>0的数量),进而计算出这个赔率组合对象的主队获胜权重y_count/total_count。


随着历史数据的不断增加,权重会一直改变,而且朝着最近时期的趋势方向变化,也正符合业务逻辑。


然后再根据当前比赛得出的结果iw10_yes_4_0计算信心指数,即{历史数据中主队获胜数量-(主队不胜的数量X3) X 对应的权重}。


Bagging算法


Bagging算法的基本思想为给定一个弱学习算法(单个弱学习算法准确率不高),和一个训练集,将该学习算法使用多次,得出预测函数序列,进行投票,使得最后结果准确率得到提高。


Bagging是并行式集成学习方法的典型代表,它直接基于自助采样法。给定包含m个样本的数据集,我们先随机取出一个样本放入采样中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。


这样,经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现。


照这样,我们可采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。


这就是Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。


若分类预测时出现两个收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。


在本文中,借助了Bagging算法的思路,但是采用的是不放回抽样,形成不同阶段的训练数据集,根据每个阶段的投票结果综合计算最后的计算预测结果,


总结

本篇提出了新颖的机器学习预测中的建模思想——三木板模型(已在国家期刊发表论文并被万方数据库收录, 三木板模型算法论文地址:http://wanfangdata.com.cn 搜索“基于机器学习的预测算法模型及其在环评领域的应用”), 并提出了评估模型的思路,对于足球领域之外的其他领域也非常有借鉴意义,同时对反向传播算法和Bagging算法的原理进行了阐述。


代码地址

示例代码:https://github.com/JustDoPython/python-100-day/tree/master/day-100

目录
相关文章
|
9天前
|
算法
基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真
本项目基于MATLAB2022a,采用模糊PI控制算法结合龙格-库塔方法,对CSTR模型进行Simulink建模与仿真。通过模糊控制处理误差及变化率,实现精确控制。核心在于将模糊逻辑与经典数值方法融合,提升系统性能。
|
9天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
83 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
84 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
85 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
15天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
21天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
1天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
下一篇
DataWorks