比赛结果足球_ 采用 Python 机器学习预测足球比赛结果!买谁赢就谁赢!

应用Python机器学习预测足球比赛结果

足球是世界上最受欢迎的运动之一,在世界杯期间也是球迷们最兴奋的时刻。 比赛的狂欢季节不仅把熬夜看球的铁球迷吹跑了,足球比赛也成为大家茶饭后最热心的话题。 即使是很少看足球的人,也要暗地补充很多关于足球的知识,在比赛竞赛中首先获得小目标。 今天,我们来介绍一下运用机器学习来预测足球比赛结果的方法!

本Chat采用Python编程语言,将人工智能建模平台Mo作为在线开发环境进行编程,取得2000年至2018年共19年的英超比赛数据,然后进行监督学习的逻辑回归模型、支持向量机模型

Python学习交流组: 1004391443,这里是Python学习者聚集的地方,大牛有疑问,资源共享! 编辑也准备了python的学习资料,想学习python的编程的人,想跳槽的人,大学生,想通过工作提高自己的能力的人,学习的伙伴欢迎参加。

接下来,让我们看一下预测英超比赛结果的机器学习步骤

主要流程步骤

取得数据和读取数据的信息数据清洗和预处理特征工程建立机器学习模型,进行预测总结和展望1 .取得数据和读取数据的信息

首先,我们进入Mo工作台,创建一个空白项目,然后单击开始开发嵌入到JupyterLab中的Notebook开发环境。

然后,您需要将数据集上载到项目中。

英超每年举行赛季,从每年的8月到翌年的5月,共计20队,实施主场双联赛制,每赛季有38场比赛(其中主场比赛有19场,客场比赛有19场),每场合共计10场,每赛季有380场。

数据集地址数据集的特性说明如果在MO平台上创建了新项目,则可以将数据集直接导入平台。 过程包括:

1.1读取CSV数据接口的解释

Pandas.read_csv ( )通常在pandas读取和写入数据API聚合网站上读取csv数据

pandas.read _ CSV (文件路径_ or _ buffer,sep = ',delimiter = None )

filepath_or_buffer :文件路径sep :指定分隔符,默认值为逗号分隔符,替换分隔符(更改参数时sep无效) usecols :指定读取的列名,列表格式#为必需的包导入

import warnings

warnings.filter warnings ( ' ignore ' )防止打包警告文件

import pandas as pd #数据分析数据包

导入操作系统

import matplotlib.pyplot as plt #视觉化套件

import matplotlib

%matplottlibbinline

import seaborn as sns #视觉套件

来自时间导入时间

froms klearn.preprocessing scale #标准化操作

froms klearn.model _ selectionimporttrain _ test _ split #将数据集分为测试集和培训集

froms klearn.metricsimportf1_ score # f 1分数

import xgboost as xgb # XGBoost机型

支持from sk learn.SVM导入SVC # #向量机分类模型

froms klearn.linear _ modelimportlogisticregression #逻辑回归模型

froms klearn.model _ selectionimportgridsearchcv #超级参数调整模块

froms klearn.metricsimportmake _ scorer #模型评估

import joblib #保存和加载模块

接下来开始我们的表演

#检索地址中的所有文件

loc = './/football//' #存储数据的路径

res_name =

根据上述图,特征HTP特征与HTGD特征之间的相关性较强,而ATP特征与ATGD特征之间的相关性也较强,并且可显示出多重共线性情况。 这可以看出,主周的平均得分越高,主周的平均纯胜球数也就越高。 考虑到这些变量,我们可以得出结论。 因为他们提供着几乎相同的信息,所以实际上发生了多重共通线性。 在此考虑删除HTP和“ATP”这两个特征,保留HTGD和ATGD这两个特征。 皮尔逊热图很适合检测这种情况,在特征工程中,它们是不可或缺的工具。 同时,我们还发现,上次球队比赛结果对当前比赛结果的影响很小。 在此,我们考虑保留这些特点。

考虑到样本集中的特征HTP和HTGD,ATP与ATGD之间的相关性均超过了90%,因此删除了特征HTP,并将ATP :X_all=X_all.drop (

我们看到最相关的特征是HTGD,球队主场周的平均净胜球数越高,表明他们获胜的概率越高。

4 .建立和预测机器学习模型

4.1分割数据

随机将数据集分成训练集和测试集,并返回分割的训练集测试集样本和训练集测试集标签。 我们直接通过train_test_split接口进行处理。

4.1.1 train_test_split API介面介绍

X_train、X_test、y_train、y _ test = cross _ validation.train _ test _ split ( train _ data、train_target、test_size=0.3,random_state=0) 参数解释: train_data :划分后的样本特征集train_target :划分后的样本标签test_size :对于浮点数目,表示样本占有率的整数数目random_state :随机数的种类。 返回值的解释: x_train :训练集的特征值x_test :训练集的特征值y_train :训练集的目标值y_test :测试集的目标值的随机种子:实际上是该组的随机数,如果需要重复实验,则使用相同的随机数标记 例如,每次输入1,使得在其他参数相同的情况下获得的随机排列相同。 但是,是否填写0每次都不同。 随机数的产生取决于种子,随机数与种子的关系遵循以下两个规则:种子不同,产生不同随机数的种子相同,即使实例不同,也产生相同的随机数。

4.1.2代码处理分割数据

froms klearn.model _ selectionimporttrain _ test _ split

X_train,X_test,y_train,y_test = train_test_split(X_all,y_all,test_size = 0.3,random_state = 2,ratfy=y_all )

4.2相关模型及其接口介绍

让我们使用三种不同的模型来看看他们的表达方式:逻辑回归、支持向量机和XGBoost。 首先定义一些辅助函数,记录模型的训练时间和评价时间,计算模型的精度和f1得分。 首先介绍这三种模型之间的联系和差异以及相关的界面

4.2.1逻辑回归的介绍

逻辑回归模型假定数据遵循伯努利分布,并且通过以最大化似然函数的方式使用梯度下降对参数进行求解来实现对数据进行二元分类的目的。 该模型的主要优点是说明性好,如果特征工程做得好,模型的效果也很好,训练速度也很快,输出结果也很容易调整。 但是,该模型的缺点是精度不太高,难以处理数据的不均衡等。

4.2.2逻辑回归模型界面介绍

API:sk learn.linear _ model.logistic regression ( penalty = ' L2 '、双面=假、tol=0.0001、C=1.0、fit_intercept=True、intercept_scaling=1、 class _ weight = none random _ state = none,solver='liblinear ',max_iter=100,multi_class='ovr ',verbose=0,warm_start=False,n_jobs=1)

主要参数分析: penalty :正规化参数,l1 or l2,default: l2; c :归一化系数λ倒数,default: 1.0; fit_intercept :是否有截距、default: Truesolver :损失函数的优化方法为: {newton-cg,lbfgs,liblinear,sag } default:liblinearmulti _ class :分类方式选择,一般为 class_weight :类型权重参数,缺省为Nonerandom_state :随机种子,缺省为无tol :迭代结束标准误差范围n_jobs :并行行数,如-1,则与CPU核心数匹配,缺省为1。 以上是主要参数的简单分析,想了解详情的人请访问官方网站。

4.2.3支持向量机介绍

SVM(Support Vector Machine )是2种分类模型。 其基本模型是寻找特征空间中间隔最大化的分离超平面的线性分类器。

(1)当训练样本是线性的并且可时分时,由于硬间隔被最大化,线性分类器被学习,即线性可分割的支持向量机

(2)当训练数据接近线性时,通过引入松弛变量并使软间隔最大化,学习线性分类器,即线性支持向量机

(3)训练数据不能线性分时,通过最大化核技术和软件间隔,学习非线性支持向量机。

4.2.4支持向量机分类模型API

sklearn.svm.SVC(C=1.0,kernel='rbf ',degree=3,gamma = ' auto ',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200, class_weight=None verbose=False,max_iter=-1,decision_function_shape=None,random_state=None )

主要参数分析: C:C-SVC的补偿参数c,默认值为1.0。 c越大,相当于惩罚缓和变量,缓和变量越接近0,即误分类的惩罚越大,倾向于将训练集完全对照,测试训练集时的精度越高,但泛化能力越弱。 c的值小,对错误分类的惩罚减少,容许,把他们看作噪音点,泛化能力强。 kernel :内核函数,缺省为rbf、“线性”、“多边形”、“rbf”、“预压缩”0–线性: u ' v1–多项式: ( gamma _ u ' _ v + coef0) ^ degree 2–RBF函数: exp (-gamma|u-v|^2) 3 默认值为3,如果选择其他内核函数,则忽略该函数。 gamma:RBF、poly和sigmoid的内核函数参数。 缺省值为auto,选择1/n_features的coef0:内核函数的常量项。 对于poly和sigmoid很有用。 max_iter :最大迭代次数。 -1是无限制的。 decision_function_shape :ovo,ovr or None,default=None。 要调整的主要参数包括c、kernel、degree、gamma和coef0。有关参数的详细信息,请参见主页。

4.2.5 XGBoost原理介绍

XGBoost是Boosting算法之一,Boosting算法的思想综合了许多弱分类器,形成强分类器,基本原理是下一个决策树输入样本与前一个决策树的训练和预测有关。 因为XGBoost认为是提升树模型,所以他整合了很多树模型,形成了强的分类器。 所使用的树模型是CART回归树模型。

4.2.6 XGBoost介面介绍

XG boost.xgbregressor ( max _ depth = 3、learning_rate=0.1、n_estimators=100、silent=True、objective='reg:linear '、booster='gbtree '、n_jobs=1 min_child_weight=1,max_delta_step=0,子采样数= 1,col采样数_ by树= 1,col采样数_ by级别= 1,reg_alpha=0,reg_lambda=1,scale _ pos _ weiggs

主要参数分析: booster :模型类别,主要使用两种类型,gbtree和gbliner,默认情况下使用gbtree nthread:CPU数量,如果-1,则表示使用所有CPU进行并行运算(默认)。 scale _ pos _ weight ( scale _ pos _ weight ) :表示使用一个cpu进行运算的正样本权重,在二分类任务中正负样本的比率不均衡的情况下,设定正样本权重会提高模型的效果。 例如,在正负样本的比例为1:10的情况下,scale_pos_weight=10; n_estimatores :总迭代次数,即决策树数early_stopping_rounds :在验证集中,连续迭代n次,如果得分未提高,则预先训练max_depth :树的深度,默认值为6, 标准值为3-10 min_child_weight :值越大,拟合越容易不足的值越小,拟合越容易(值越大时,模型不学习局部特殊样本),默认值为1 learning_rate :学习率, 控制更新每次迭代的权重的步骤,缺省值为0.3 gamma :惩罚项系数,alpha:l 1归一化系数,缺省值为1 lambda:L2归一化系数,缺省值为1种子:随机种子。 有关此API的更多信息,请访问主页网站。

4.3建立和评价机器学习模式

4.3.1建立模型

来自时间导入时间

froms klearn.metricsimportf1_ score

def train_classifier(clf,X_train,y_train ) :

我是培训模式

#记录训练时间

start = time ( )

clf.fit(X_train,y_train )

end = time ( )

print ( "培训时间{:.4f}秒".format (结束-开始) )

def predict_labels(clf,features,target ) :

使用模型的预测

#记录预测时间

start = time ( )

y _ pred = clf.predict (功能)

end = time ( )

print ( "预测时间in {:.4f}秒".format (结束-开始) )

return f1_score(target,y_pred,pos_label=1),sum ( target = = y _ pred )/float ( len ( y _ pred ) )

def train_predict(clf,X_train,y_train,X_test,y_test ) :

“培训和评估模型”

# indicatatetheclassifierandthetrainingsetsize

print ( "培训{} )模型,样本数{ }.format ( clf._ _ _ _ _,len(X_train ) )

#培训模型

train_classifier(clf,X_train,y_train )

在#测试集中评估模型

f1,acc = predict_labels(clf,X_train,y_train )

print ( "培训集中的F1分数和符合率: {:.4f}、{:.4f}." .format(f1,acc ) )

f1,acc = predict_labels(clf,X_test,y_test )

print ( "测试集的F1分数和精度为: {:.4f},:.4f }.".format ( f1,acc ) )

4.3.2分别初始化、训练和评价模型

import xgboost as xgb

froms klearn.linear _ modelimportlogisticregression

from sk learn.SVM导入SVC

分别创建#3个模型

clf _ a = logistic regression ( random _ state = 42 )

clf_B = SVC(random_state = 42,kernel='rbf ',伽马='auto ' )

clf _ c = xgb.xgbclassifier ( seed = 42 )

train_predict(clf_A,X_train,y_train,X_test,y_test )

print ( ' )

train_predict(clf_B,X_train,y_train,X_test,y_test )

print ( ' )

train_predict(clf_C,X_train,y_train,X_test,y_test )

print ( ' )

培训LogisticRegression模型,样本数3675。

培训时间0.0050秒

预测时间in 0.0010秒

训练集中的F1得分和准确率为0.6232、0.6648。

预测时间in 0.0010秒

测试集的F1分数和准确率分别为0.6120和0.6457。

培训SVC模型,样本数3675。

培训时间0.5755秒

预测时间in 0.3620秒

训练集中的F1得分和准确率为0.6152,0.6746。

预测时间in 0.1486秒

测试集的F1分数和精度为: 0.5858,0.6400

XGBClassifier型号培训,样本数3675 ...

培训时间0.4079秒

预测时间in 0.0110秒

训练集的F1点和精度为:0. 6652,0.7067

预测时间in 0.0060秒

测试集的F1分数和精度分别为:0.5844和0.6279。

执行结果表明:

训练时间中逻辑回归时间最短,XGBoost时间最长,2秒以上。 在预测时间中,逻辑回归最耗时,支持向量机最耗时。 在训练集中,在F1分中XGBoost得分最高,支持向量机得分最低,但差别不大。 用训练集分析精度,XGBoost得分最高,逻辑回归最低。 在测试集中分析F1得分,逻辑回归最好,其馀两个模型大致相等,相对较低。 用测试集分析精度,逻辑回归支持向量机**的两个模型基本相等,略高于XBGoost。 4.4超参数调整

使用sklearn网格搜索调整超级参数。

froms klearn.model _ selectionimportgridsearchcv

froms klearn.metricsimportmake _ scorer

import xgboost as xgb

#设定自动调整的参数

parameters = { 'n_estimators ' :,

以下称为

初始化#模型

clf = xgb.XGBClassifier(seed=42 )

f1_scorer = make_scorer(f1_score,pos_label=1)

使用grdi搜索自动参与

grid_obj = GridSearchCV(clf

scoring=f1_scorer

param_grid=parameters

cv=5)

grid_obj = grid_obj.fit(X_train,y_train )

#获得最佳模型

clf = grid_obj.best_estimator_

# print(clf )

#显示最终的模型效果

f1,acc = predict_labels(clf,X_train,y_train )

print ( " f1 scoreandaccuracyscorefortrainingset:{:. 4f,:.4f }.".format ( f1,acc ) )

f1,acc = predict_labels(clf,X_test,y_test )

print ( " f1 scoreandaccuracyscorefortestset:{:. 4f,:.4f } ".format ( f1,acc ) )

预测时间in 0.0368秒

f1 scoreandaccuracyscorefortrainingset:0.7911,0.8201。

预测时间in 0.0149秒

f1 scoreandaccuracyscorefortestset:0.5702,0.6133。

4.5保存模型和加载模型

然后,可以保存模型以供以后使用。

import joblib

储存模型

joblib.dump(clf,' xgboost_model.model ' )

导入#模型

xgb = job lib.load ( ' XG boost _ model.model ' )

我们尝试了预测

范例1 = x _ test .范例( n = 5,random_state=2)

y_test_1 = y_test.sample(n=5,random_state=2)

打印(样例1 )

进行预测

y _ pred = xgb.predict (范例1 )

print ( "实际值: %s \n预测值: %s"%(y_test_1.values,y_pred ) )

htgdatgdhmd1_ hm D1 _ hm D1 _ WCA m1 _ DMM1_ lwhm2_ d \

70 0.189646 -1.088217 0 0 1 0 1 0 0

5529 -0.668332 -0.901190 0 1 0 1 0 0 0

4297-0.70257-0.136082010100

5230 -0.654740 -1.302447 0 0 1 0 1 0 0

1307 1.438387 -0.269101 1 0 0 0 0 1 0

hm2 _ hmm2_ WCA m2 _ DMM2_ lwhm3_ hmm3_ lwa m3 _ DMM3_ l \

70 0 1 0 1 0 1 0 0 1 0

5529 0 1 0 1 0 1 0 0 0 1

4297 1 0 0 1 0 1 0 0 1 0

5230 1 0 1 0 0 0 1 0 0 1

1307 0 1 0 0 1 1 0 0 0 0

AM3_W

70 0

5529 0

4297 0

5230 0

1307 1

实际值: [0 0 1 1 1]

预测值: [1 0 1 1 1]

综上所述,从test数据中随机选出5个,认为预测值与实际的值相同的有4个,精度低,得到该结果感到荣幸。

大家都在看

相关专题