决策树+随机森林模型实现足球大小球让球预测软件
文章目录
- 前言
- 一、决策树是什么?
- 二、数据收集与整理
- 1.数据收集
- 2.数据清洗
- 3.特征选择
- 三、决策树构建
- 3.1绘制训练数据图像
- 3.2 训练决策树模型
- 3.3 依据模型绘制决策树的决策边界
- 3.4 树模型可视化
- 四、模型预测
- 五、随机森林模型
- 总结
前言
之前搞足球数据分析的时候,会通过一些预设条件去筛选比赛,比如当前比分是0-0,射门数>10并且射正数>2,盘口为1,那么筛选出来就是大球,反之则是小球,这种逻辑条件就是跟决策树差不多的算法模式,所以尝试用CART算法(决策树的一种算法),看一下这种去分析大小球胜率都能达到多少,再结合随机森林算法,胜率又能达到多少?这篇文章大概讲叙了决策树的算法实现过程。
一、决策树是什么?
决策树是一种树形模型,也是一种十分常用的分类和回归方法。决策树算法是一种监督学习算法,英文是Decision tree。
决策树思想的来源非常朴素,程序设计中的条件分支结构就是 if-else 结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。
- 是一种树形结构,本质是一颗由多个判断节点组成的树
- 其中每个内部节点表示一个属性上的判断,
- 每个分支代表一个判断结果的输出,
- 最后每个叶节点代表一种分类结果。
用最简单的话来说,就是根据你自己的条件,告诉模型正确的结果,比如射门数>10,是大球,反之就是小球,当然不可能这么简单,这里还包含很多特征数据,以及特征的增熵。
二、数据收集与整理
1.数据收集
这里引用第三方网站的数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.数据清洗
代码如下(示例):
data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

3.特征选择
我们选择以下特征来构建决策树:
- 主队进球数
- 客队进球数
- 比赛时间(简单划分为早期、中期、后期)
- 射门次数
- 射正次数
但由于简化示例的限制,我们将只使用“主队进球数 +
客队进球数”这一复合特征,并假设阈值设为2.5球(即总进球数大于等于3为大球,否则为小球)。
三、决策树构建
3.1绘制训练数据图像
import numpy as np
import matplotlib.pyplot as pltfrom sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.targetplt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])plt.show()
绿色为大球、橙色为走水、蓝色为小球

3.2 训练决策树模型
from sklearn.tree import DecisionTreeClassifiertree = DecisionTreeClassifier(max_depth=2,criterion="entropy")
tree.fit(X,y)
3.3 依据模型绘制决策树的决策边界
#找到模型的决策边界,并绘制图像(此方法所用到的api不需要掌握,能够调用就行)
def plot_decision_boundary(model,axis):x0,x1 = np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))X_new = np.c_[x0.ravel(),x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_map = ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])plt.contourf(x0,x1,zz,linewidth=5,cmap=custom_map)plot_decision_boundary(tree,axis=[0.5,7.5,0,3])
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
plt.show()

3.4 树模型可视化
from sklearn.tree import plot_tree
import matplotlib.pyplot as pltplot_tree(tree,filled=True)
plt.show()

从上面的可视化图形中看出
- X[1] <=0.8 作为第一次分割的依据,满足条件的所有样本均为统一类别
- X[1]>0.8的,依据 X[1]<=0.75 为划分依据
- 由于设置了树的最大深度为2,第二层的两个叶子节点没有完全区分开
决策树算法:
·是非参数学习算法
·可以解决分类(多分类)问题
·可以解决回归问题:
·落在叶子节点的数据的平均值作为回归的结果
四、模型预测
将实时采集的滚球数据喂到大模型中
# 用LabelEncoder转换器就能把字符串类型的球队名转化为整型
from sklearn.preprocessing import LabelEncoder
encoding = LabelEncoder()
home_team = encoding.fit_transform(dataset["Home Team"].values)
visitor_team = encoding.fit_transform(dataset["Visitor Team"].values)
# 抽取所有比赛的主客场球队的球队名(已转化为数值型)并将其组合(在NumPy中叫作“stacking”,是向量组合的意思)起来,形成一个矩阵
x_team = np.vstack([home_team, visitor_team]).T# 使用OneHotEncoder转换器把这些整数转换为二进制数字
from sklearn.preprocessing import OneHotEncoder
onehot = OneHotEncoder()
x_teams_expanded = onehot.fit_transform(x_team).todense()clf = DecisionTreeClassifier(random_state=14)
scores = cross_val_score(clf, x_teams_expanded, y_true, scoring='accuracy')
print("The accuracy of 'x_teams_expanded' is {0:1f}%".format(np.mean(scores) * 100))
结果如下,大概60%的胜率,说明效果还行。后续用随机森林优化算法

五、随机森林模型
过程太长,这里直接上部门代码
# 使用GridSearchCV搜索最佳参数
parameter_space = {'max_features': [2, 10, 'auto'],'n_estimators': [10, ],'criterion': ['gini', 'entropy'],'min_samples_leaf':[2, 4, 6],
}
grid = GridSearchCV(clf, parameter_space)
grid.fit(x_specific_team, y_true)
print("The accuracy of specific_team after GridSearchCV is {0:.1f}%".format(grid.best_score_ * 100))
grid.fit(x_all, y_true)
print("The accuracy of x_all after GridSearchCV is {0:.1f}%".format(grid.best_score_ * 100))


可以看到,增加了随机森林算法之后,胜率又提高了一点
总结
这里只是简单的写了大概的方法,具体实现还是很复杂的,包括特征数据的选取,以及各种模型算法的调优。还要按照联赛去区分训练数据,因为你不同的联赛数据是不可比的,小联赛进球数可能达到10个以上,但是大联赛,进球数可能才几个,所以我们是根据分了联赛数据和公共数据的训练集,目前这两种算法结合的话,目前跑过最高的联赛应该是可以去到80%左右,效果还可以。当然有些联赛暂时可能也只能去到65%。
最后:推荐一个关于用大模型构建的足球数据分析学习软件
1、AiAutoPrediction-基于泊松大模型足球数据分析软件
2、SoccerPredictor-基于决策树大模型足球数据分析软件

相关文章:
决策树+随机森林模型实现足球大小球让球预测软件
文章目录 前言一、决策树是什么?二、数据收集与整理1.数据收集2.数据清洗3.特征选择 三、决策树构建3.1绘制训练数据图像3.2 训练决策树模型3.3 依据模型绘制决策树的决策边界3.4 树模型可视化 四、模型预测五、随机森林模型总结 前言 之前搞足球数据分析的时候&…...
31省市农业地图大数据
1.北京市 谷类作物种植结构(万亩) 农作物种植结构(万亩) 2.天津市 谷类作物种植结构(万亩) 农作物种植结构(万亩) 3.黑龙江省 谷类作物种植结构(万亩) 农作物…...
http请求包含什么
HTTP请求通常包含以下几个主要部分: 请求行(Request Line): 包含请求方法(如 GET、POST、PUT、DELETE 等)、请求的目标 URI 和 HTTP 版本。例如:GET /index.html HTTP/1.1 请求头部(…...
【基础算法总结】模拟篇
目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…...
《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>
目录 一、回顾神经网络框架 1、单层神经网络 2、多层神经网络 二、手写数字识别 1、续接上节课代码,如下所示 2、建立神经网络模型 输出结果: 3、设置训练集 4、设置测试集 5、创建损失函数、优化器 参数解析: 1)para…...
【笔记】材料分析测试:晶体学
晶体与晶体结构Crystal and Crystal Structure 1.晶体主要特征 固态物质可以分为晶态和非晶态两大类,分别称为晶体和非晶体。 晶体和非晶体在微观结构上的区别在于是否具有长程有序。 晶体(长程有序)非晶(短程有序)…...
飞塔Fortigate7.4.4的DNS劫持功能
基础网络配置、上网策略、与Server的VIP配置(略)。 在FortiGate上配置DNS Translation,将DNS请求结果为202.103.12.2的DNS响应报文中的IP地址修改为Server的内网IP 10.10.2.100。 config firewall dnstranslationedit 1set src 2.13.12.2set…...
Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】
Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 目录 Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 一、简单介绍 二、状态模式(State Pattern) 1、什么时候使用状态模式 2、使用状态模式的…...
【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码
目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…...
openmv与stm32通信
控制小车视觉循迹使用 OpenMV 往往是不够的。一般使用 OpenMV 对图像进行处理,将处理过后的数据使用串口发送给STM32,使用STM32控制小车行驶。本文主要讲解 OpenMV 模块与 STM32 间的串口通信以及两种循迹方案,分别是划分检测区域和线性回归。…...
C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)
目录 序列式容器 Vector vector概述 vector的迭代器 vector的数据结构 vector的构造和内存管理 vector的元素操作 List List概述 List的设计结构 List的迭代器 List的数据结构 List的内存构造 List的元素操作 C标准模板库(STL)是一组高效的…...
【c数据结构】OJ练习篇 帮你更深层次理解链表!(相交链表、相交链表、环形链表、环形链表之寻找环形入口点、判断链表是否是回文结构、 随机链表的复制)
目录 一. 相交链表 二. 环形链表 三. 环形链表之寻找环形入口点 四. 判断链表是否是回文结构 五. 随机链表的复制 一. 相交链表 最简单粗暴的思路,遍历两个链表,分别寻找是否有相同的对应的结点。 我们对两个链表的每个对应的节点进行判断比较&…...
微软开源GraphRAG的使用教程(最全,非常详细)
GraphRAG的介绍 目前微软已经开源了GraphRAG的完整项目代码。对于某一些LLM的下游任务则可以使用GraphRAG去增强自己业务的RAG的表现。项目给出了两种使用方式: 在打包好的项目状态下运行,可进行尝试使用。在源码基础上运行,适合为了下游任…...
使用Refine构建项目(1)初始化项目
要初始化一个空的Refine项目,你可以使用Refine提供的CLI工具create-refine-app。以下是初始化步骤: 使用npx命令: 在命令行中运行以下命令来创建一个新的Refine项目: npx create-refine-applatest my-refine-project这将引导你通过…...
【Docker】安装及使用
1. 安装Docker Desktop Docker Desktop是官方提供的桌面版Docker客户端,在Mac上使用Docker需要安装这个工具。 访问 Docker官方页面 并下载Docker Desktop for Mac。打开下载的.dmg文件,并拖动Docker图标到应用程序文件夹。安装完成后,打开…...
[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨VLMs能否玩动作角色扮演游戏?
1. 论文简介 论文《Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case》是阿里巴巴集团的Peng Chen、Pi Bu、Jun Song和Yuan Gao,在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…...
提升动态数据查询效率:应对数据库成为性能瓶颈的优化方案
引言 在现代软件系统中,数据库性能是决定整个系统响应速度和处理能力的关键因素之一。然而,当系统负载增加,特别是在高并发、大数据量场景下,数据库性能往往会成为瓶颈,导致查询响应时间延长,影响用户体验…...
Prometheus+grafana+kafka_exporter监控kafka运行情况
使用Prometheus、Grafana和kafka_exporter来监控Kafka的运行情况是一种常见且有效的方案。以下是详细的步骤和说明: 1. 部署kafka_exporter 步骤: 从GitHub下载kafka_exporter的最新版本:kafka_exporter项目地址(注意ÿ…...
在vue中:style 的几种使用方式
在日常开发中:style的使用也是比较常见的: 亲测有效 1.最通用的写法 <p :style"{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p> 2.三元表达式 <a :style"{height:…...
商城小程序后端开发实践中出现的问题及其解决方法
前言 商城小程序后端开发中,开发者可能会面临多种问题。以下是一些常见的问题及其解决方法: 一、性能优化 问题:随着用户量的增加和功能的扩展,商城小程序可能会出现响应速度慢、处理效率低的问题。 解决方法: 对数…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
