当前位置: 首页 > news >正文

决策树+随机森林模型实现足球大小球让球预测软件

文章目录

  • 前言
  • 一、决策树是什么?
  • 二、数据收集与整理
    • 1.数据收集
    • 2.数据清洗
    • 3.特征选择
  • 三、决策树构建
    • 3.1绘制训练数据图像
    • 3.2 训练决策树模型
    • 3.3 依据模型绘制决策树的决策边界
    • 3.4 树模型可视化
  • 四、模型预测
  • 五、随机森林模型
  • 总结


前言

之前搞足球数据分析的时候,会通过一些预设条件去筛选比赛,比如当前比分是0-0,射门数>10并且射正数>2,盘口为1,那么筛选出来就是大球,反之则是小球,这种逻辑条件就是跟决策树差不多的算法模式,所以尝试用CART算法(决策树的一种算法),看一下这种去分析大小球胜率都能达到多少,再结合随机森林算法,胜率又能达到多少?这篇文章大概讲叙了决策树的算法实现过程。


一、决策树是什么?

决策树是一种树形模型,也是一种十分常用的分类和回归方法。决策树算法是一种监督学习算法,英文是Decision tree。

决策树思想的来源非常朴素,程序设计中的条件分支结构就是 if-else 结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

  • 是一种树形结构,本质是一颗由多个判断节点组成的树
  • 其中每个内部节点表示一个属性上的判断,
  • 每个分支代表一个判断结果的输出,
  • 最后每个叶节点代表一种分类结果。

用最简单的话来说,就是根据你自己的条件,告诉模型正确的结果,比如射门数>10,是大球,反之就是小球,当然不可能这么简单,这里还包含很多特征数据,以及特征的增熵。

射正数>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-基于决策树大模型足球数据分析软件

在这里插入图片描述

相关文章:

决策树+随机森林模型实现足球大小球让球预测软件

文章目录 前言一、决策树是什么&#xff1f;二、数据收集与整理1.数据收集2.数据清洗3.特征选择 三、决策树构建3.1绘制训练数据图像3.2 训练决策树模型3.3 依据模型绘制决策树的决策边界3.4 树模型可视化 四、模型预测五、随机森林模型总结 前言 之前搞足球数据分析的时候&…...

31省市农业地图大数据

1.北京市 谷类作物种植结构&#xff08;万亩&#xff09; 农作物种植结构&#xff08;万亩&#xff09; 2.天津市 谷类作物种植结构&#xff08;万亩&#xff09; 农作物种植结构&#xff08;万亩&#xff09; 3.黑龙江省 谷类作物种植结构&#xff08;万亩&#xff09; 农作物…...

http请求包含什么

HTTP请求通常包含以下几个主要部分&#xff1a; 请求行&#xff08;Request Line&#xff09;&#xff1a; 包含请求方法&#xff08;如 GET、POST、PUT、DELETE 等&#xff09;、请求的目标 URI 和 HTTP 版本。例如&#xff1a;GET /index.html HTTP/1.1 请求头部&#xff08;…...

【基础算法总结】模拟篇

目录 一&#xff0c;算法介绍二&#xff0c;算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三&#xff0c;算法总结 一&#xff0c;算法介绍 模拟算法本质就是"依葫芦画瓢"&#xff0c;就是在题目中已经告诉了我们该如何操作…...

《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>

目录 一、回顾神经网络框架 1、单层神经网络 2、多层神经网络 二、手写数字识别 1、续接上节课代码&#xff0c;如下所示 2、建立神经网络模型 输出结果&#xff1a; 3、设置训练集 4、设置测试集 5、创建损失函数、优化器 参数解析&#xff1a; 1&#xff09;para…...

【笔记】材料分析测试:晶体学

晶体与晶体结构Crystal and Crystal Structure 1.晶体主要特征 固态物质可以分为晶态和非晶态两大类&#xff0c;分别称为晶体和非晶体。 晶体和非晶体在微观结构上的区别在于是否具有长程有序。 晶体&#xff08;长程有序&#xff09;非晶&#xff08;短程有序&#xff09…...

飞塔Fortigate7.4.4的DNS劫持功能

基础网络配置、上网策略、与Server的VIP配置&#xff08;略&#xff09;。 在FortiGate上配置DNS Translation&#xff0c;将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 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 一、简单介绍 二、状态模式&#xff08;State Pattern&#xff09; 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 对图像进行处理&#xff0c;将处理过后的数据使用串口发送给STM32&#xff0c;使用STM32控制小车行驶。本文主要讲解 OpenMV 模块与 STM32 间的串口通信以及两种循迹方案&#xff0c;分别是划分检测区域和线性回归。…...

C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)

目录 序列式容器 Vector vector概述 vector的迭代器 vector的数据结构 vector的构造和内存管理 vector的元素操作 List List概述 List的设计结构 List的迭代器 List的数据结构 List的内存构造 List的元素操作 C标准模板库&#xff08;STL&#xff09;是一组高效的…...

【c数据结构】OJ练习篇 帮你更深层次理解链表!(相交链表、相交链表、环形链表、环形链表之寻找环形入口点、判断链表是否是回文结构、 随机链表的复制)

目录 一. 相交链表 二. 环形链表 三. 环形链表之寻找环形入口点 四. 判断链表是否是回文结构 五. 随机链表的复制 一. 相交链表 最简单粗暴的思路&#xff0c;遍历两个链表&#xff0c;分别寻找是否有相同的对应的结点。 我们对两个链表的每个对应的节点进行判断比较&…...

微软开源GraphRAG的使用教程(最全,非常详细)

GraphRAG的介绍 目前微软已经开源了GraphRAG的完整项目代码。对于某一些LLM的下游任务则可以使用GraphRAG去增强自己业务的RAG的表现。项目给出了两种使用方式&#xff1a; 在打包好的项目状态下运行&#xff0c;可进行尝试使用。在源码基础上运行&#xff0c;适合为了下游任…...

使用Refine构建项目(1)初始化项目

要初始化一个空的Refine项目&#xff0c;你可以使用Refine提供的CLI工具create-refine-app。以下是初始化步骤&#xff1a; 使用npx命令&#xff1a; 在命令行中运行以下命令来创建一个新的Refine项目&#xff1a; npx create-refine-applatest my-refine-project这将引导你通过…...

【Docker】安装及使用

1. 安装Docker Desktop Docker Desktop是官方提供的桌面版Docker客户端&#xff0c;在Mac上使用Docker需要安装这个工具。 访问 Docker官方页面 并下载Docker Desktop for Mac。打开下载的.dmg文件&#xff0c;并拖动Docker图标到应用程序文件夹。安装完成后&#xff0c;打开…...

[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨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&#xff0c;在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…...

提升动态数据查询效率:应对数据库成为性能瓶颈的优化方案

引言 在现代软件系统中&#xff0c;数据库性能是决定整个系统响应速度和处理能力的关键因素之一。然而&#xff0c;当系统负载增加&#xff0c;特别是在高并发、大数据量场景下&#xff0c;数据库性能往往会成为瓶颈&#xff0c;导致查询响应时间延长&#xff0c;影响用户体验…...

Prometheus+grafana+kafka_exporter监控kafka运行情况

使用Prometheus、Grafana和kafka_exporter来监控Kafka的运行情况是一种常见且有效的方案。以下是详细的步骤和说明&#xff1a; 1. 部署kafka_exporter 步骤&#xff1a; 从GitHub下载kafka_exporter的最新版本&#xff1a;kafka_exporter项目地址&#xff08;注意&#xff…...

在vue中:style 的几种使用方式

在日常开发中:style的使用也是比较常见的&#xff1a; 亲测有效 1.最通用的写法 <p :style"{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p> 2.三元表达式 <a :style"{height:…...

商城小程序后端开发实践中出现的问题及其解决方法

前言 商城小程序后端开发中&#xff0c;开发者可能会面临多种问题。以下是一些常见的问题及其解决方法&#xff1a; 一、性能优化 问题&#xff1a;随着用户量的增加和功能的扩展&#xff0c;商城小程序可能会出现响应速度慢、处理效率低的问题。 解决方法&#xff1a; 对数…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...