科学预测世界杯-采用机器学习方法

最近不管是在哪,世界杯永远是大家闲聊的话题。而随着互联网的发展,购买足彩越发便利和火爆了,体彩不像福彩,我们可以根据各个球队的情况做一些猜测。但作为一名看世界杯只记的住场边广告的伪球迷,也想凑热闹买一把,怎么才能保证在前面几次比赛的基础上,比较科学靠谱的预测比赛结果呢?做为一名略懂机器学习的伪球迷,当然要发挥学科的优势来凑凑热闹预测一下。

机器学习算法很多,我们分别实现了用SVM,神经网络,和KNN来预测。要用这些分类器首先要有训练和测试的数据,比赛进行到今天,我们已经积累了很多比赛的数据了,所以应用学习分类器是合理的。那我们应该怎么得到这些数据呢?

1.量化世界杯比赛结果和影响因素

比赛结果比较好量化,比如美国-德国,3代表美国赢,2代表打平,1代表美国输。

影响因素怎么选呢?一名伪球迷对各个队的历史,球员,教练是很难了解周全的,另外天气,球员心理状态,身体状态等等因素也是很难控制的,所以我们无法量化这些因素,而且这些信息也是很难获取的。于是一个比较合理而且简单的数据-赔率可以选用为量化了这些影响因素的综合数据。这个合不合理呢?我们知道一般赔率高的肯定胜率低,赔率低的胜率高,而赔率是怎么计算的呢?可以看这篇文章http://www.guokr.com/article/20199/了解。所以赔率和比赛胜负是相关的,通过赔率,我们可以做出比较好的判断。

2.准备训练测试数据

赔率和输赢这些数据很容易获取,比如在http://zx.500.com/jczq/kaijiang.php?playid=2&d=2014-06-26这里就可以得到平均欧赔和输赢。于是根据第一步整理好数据,训练的标签就是输赢量化后的结果,特征就是平均欧赔。而一般买彩票前平均欧赔都会提前公布的,这就是我们测试数据的特征,根据这些特征得到的预测标签就是比赛的结果。比如我们根据前几天的情况预测今天的结果。

3    1.29    5.05    11.13
3    1.43    4.24    8.08
1    1.83    3.33    4.75
3    2.18    3.11    3.55
3    2.58    3.13    2.79
1    2.69    2.97    2.88
1    1.42    4.17    8.36
3    1.82    3.24    4.93
3    1.34    5.05    8.85
3    1.28    5.35    11.12
3    2.37    3.12    3.13
1    2.42    3.25    2.92
2    4.19    3.32    1.94
3    2.01    3.43    3.71
2    1.86    3.47    4.32
2    1.32    5.19    9.26
3    1.35    4.85    8.91
1    5.39    3.80    1.64
1    1.56    4.27    5.54
1    12.92   6.39    1.21
2    2.27    3.28    3.19
3    3.58    3.55    2.02
3    2.04    3.38    3.65
1    5.52    3.95    1.60
1    4.57    3.49    1.81
1    1.52    4.04    6.59
3    4.20    3.51    1.87
1    1.30    5.45    9.20
3    1.13    8.36    19.99
2    4.45    3.77    1.75
1    2.42    3.21    3.00
3    2.12    3.29    3.55
1    2.62    3.31    2.66
2    1.12    8.53    19.89
3    2.55    3.38    2.69
1    7.51    4.91    1.39
3    3.78    3.48    1.97
1    3.46    3.57    2.05
2    4.32    3.80    1.78
1    2.53    3.31    2.76
2    5.21    3.96    1.63
1    7.22    4.37    1.44
3    2.12    3.45    3.45
1    8.49    3.99    1.45

上面是6-12到6-25的数据。根据这些过去的数据来训练模型

9.60000000000000    2.86000000000000    1.64000000000000
2.15000000000000    3.65000000000000    3.11000000000000

4.70000000000000    3.58000000000000    1.75000000000000

3.59000000000000    3.42000000000000    2.04000000000000

1.60000000000000    3.89000000000000    5.52000000000000

2.06000000000000    3.30000000000000    3.66000000000000

2.08000000000000    3.30000000000000    3.57000000000000

2.55000000000000    3.05000000000000    2.92000000000000


上面是今天(6.27,6.28,6.29)的赔率。根据这些现在的数据来预测这三天的情况。

3.测试分类器

首先我们采用的SVM分类器,利用LIBSVM工具箱可以很容易实现,当然为了使模型更加合理,在训练过程加了交叉验证,即在过去的数据里去拿一部分来训练一个模型,另一些数据来测试这个模型,然后取出使这个模型正确率最高的一些参数。在交叉验证过程大部分正确率都在50%左右,这说明赔率确实提供了一些信息,应该一般随机猜正确的概率是1/3(33.3%).

下面是这个过程的代码,要运行保证计算机上装好libsvm了。

% 数据提取
load(‘worldcuptry.mat‘,‘worldcuptry‘);
load(‘test.mat‘,‘test‘);
train_histograms=worldcuptry(:,(2:4));
test_histograms=test(:,(2:4));
train_label=worldcuptry(:,1);
test_label=test(:,1);
% 选定训练集和测试集
train_data=double(train_histograms);
test_data=double(test_histograms);

% 选择最佳的SVM参数c&g

% 首先进行粗略选择: c&g 的变化范围是 2^(-10),2^(-9),...,2^(10)
[bestacc,bestc,bestg] = SVMcgForClass(train_label,train_histograms,-10,10,-10,10);

% 打印粗略选择结果
disp(‘打印粗略选择结果‘);
str = sprintf( ‘Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g‘,bestacc,bestc,bestg);
disp(str);

% 根据粗略选择的结果图再进行精细选择: c 的变化范围是 2^(-2),2^(-1.5),...,2^(4), g 的变化范围是 2^(-4),2^(-3.5),...,2^(4),
[bestacc,bestc,bestg] = SVMcgForClass(train_label,train_histograms,-2,4,-4,4,3,0.5,0.5,0.9);

% 打印精细选择结果
disp(‘打印精细选择结果‘);
str = sprintf( ‘Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g‘,bestacc,bestc,bestg);
disp(str);

% 利用最佳的参数进行SVM网络训练
option = [‘-c ‘,num2str(bestc),‘ -g ‘,num2str(bestg)];

% SVM网络训练
model = svmtrain(train_label, train_data, option);

%SVM网络预测
[predict_label,accuracy,prob_estimates1] = svmpredict(test_label, test_data, model,‘-b 0‘);

最后得到的结果是

1
3

2

3

1

3

3

1

。说明我们成功预测了6.27的前三场比赛结果。

G组
    美国    0
    德国    1
G组
    葡萄牙    2
    加纳      1

H组
    阿尔及利亚    1
    俄罗斯        1

H组
    韩国      0
    比利时    1

其次我们采用另外一种策略KNN来看看结果

load(‘worldcuptry.mat‘,‘worldcuptry‘);
load(‘test.mat‘,‘test‘);
train_histograms=worldcuptry(:,(2:4));
test_histograms=test(:,(2:4));
train_label=worldcuptry(:,1);
test_label=test(:,1);
% 选定训练集和测试集
train_data=double(train_histograms);
test_data=double(test_histograms);
mdl =ClassificationKNN.fit(train_data,train_label,‘NumNeighbors‘,1); %训练生成一个模型-1NN
predict_label= predict(mdl,test_data);

结果为:

1
2

1

3

1

3

3

3

和SVM相差不大。

最后我们用神经网络来看看结果

clc;
clear all;
close all;
load(‘worldcuptry.mat‘,‘worldcuptry‘);
load(‘test.mat‘,‘test‘);
train_histograms=worldcuptry(:,(2:4));
test_histograms=test(:,(2:4));
train_label=worldcuptry(:,1);
test_label=test(:,1);
% 选定训练集和测试集
train_data=double(train_histograms);
test_data=double(test_histograms);
ann_train_label=zeros(3,length(train_label));
for i=1:length(train_label)
    if train_label(i)==3
        ann_train_label(3,i)=1;
    elseif train_label(i)==2
        ann_train_label(2,i)=1;
    elseif train_label(i)==1
        ann_train_label(1,i)=1;
    end
end
ann_test_label=zeros(3,length(test_label));
for i=1:length(test_label)
    if test_label(i)==3
        ann_test_label(3,i)=1;
    elseif test_label(i)==2
        ann_test_label(2,i)=1;
    elseif test_label(i)==1
        ann_test_label(1,i)=1;
    end
end
%======BP神经网络创建,训练和测试==========================%
net=network_train(train_data‘,ann_train_label);
predict_label=network_test(test_data‘,net);

function net = network_train(charvec1,label )
%从1到tn间随机排序(在[0,1]之间产生b个随机数),将数据顺序打乱
[~,b]=size(charvec1);
k=rand(1,b);
[~,n]=sort(k);
%随机提取b个样本为训练样本,个样本为预测样本
input=charvec1;
output =label;
input_train=input(:,n(1:b));
output_train=output(:,n(1:b));
% BP网络训练
% %初始化网络结构
net=newff(input_train,output_train,3);
net.trainParam.epochs=60;
net.trainParam.lr=0.1;
net.trainParam.goal=0.001;
% net.trainFcn=‘trainrp‘;
%网络训练
net=train(net,input_train,output_train);
save(‘network.mat‘,‘net‘)
end

function out = network_test(charvec,net)
input_test=charvec;
[a,b]=size(charvec);
% BP网络预测
an=sim(net,input_test);
for i=1:b
    an1(i)=find(an(:,i)==max(an(:,i)));
end
end

结果为:1    3    2    1    3    3    3    3

预测6.27全对!!!!

今天过了,让我们预测下6.28,6.29的情况

SVM的结果:

1
3

3

1

KNN的结果:

1

3

3

3

ANN的结果:

3

3

3

3

明天见分晓。

科学预测世界杯-采用机器学习方法,布布扣,bubuko.com

时间: 2024-12-17 11:34:41

科学预测世界杯-采用机器学习方法的相关文章

美团网基于机器学习方法的POI品类推荐算法

美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标等).如何使用这些已校准的POI数据,挖掘出有价值的信息,本文进行了一些尝试:利用机器学习方法,自动标注缺失品类的POI数据.例如,门店名称为"好再来牛肉拉面馆"的POI将自动标注"小吃"品类. 机器学习解决问题的一般过程:本文将按照:1)特征表示:2)特征选择:3)基

机器学习方法总结

来源: http://biostar.blog.sohu.com/61246458.html 训练:训练集——>特征选取——>训练——>分类器 分类:新样本——>特征选取——>分类——>判决 最初的数据挖掘分类应用大多都是在这些方法及基于内存基础上所构造的算法.目前数据挖掘方法都要求具有基于外存以处理大规模数据集合能力且具有可扩展能力.下面对几种主要的分类方法做个简要介绍: (1)决策树 决策树归纳是经典的分类算法.它采用自顶向下递归的各个击破方式构造决策树.树的每一个

机器学习方法--分类、回归、聚类

原创 2017-07-27 马文辉 MATLAB 作 者 简 介 马文辉,MathWorks中国应用工程师, 南开大学工学博士,在大数据处理与分析领域有多年研究与开发经验:曾就职于Nokia中国研究院,Adobe中国研发中心以及IBM中国. 近年来,全国赛的题目中,多多少少都有些数据,而且数据量总体来说呈不断增加的趋势, 这是由于在科研界和工业界已积累了比较丰富的数据,伴随大数据概念的兴起及机器学习技术的发展, 这些数据需要转化成更有意义的知识或模型. 所以在建模比赛中, 只要数据量还比较大,

常用机器学习方法总结

1.决策树算法 决策树是一种树形分类结构,一棵决策树由内部结点和叶子结点构成,内部结点代表一个属性(或者一组属性),该结点的孩子代表这个属性的不同取值:叶子结点表示一个类标.决策树保证每一个实例都能被一条从根结点到叶子结点的路径覆盖,叶子结点就是这条实例对应的类别,遍历这条路径的过程就是对这条实例分类的过程.关于决策树的详细介绍,可以参考这篇文章. 损失函数 假设决策树T的叶结点个数为|T|,t是树T的某个叶结点,该结点有$N_t$个样本点,其中k类的样本点有$N_{tk}$个,k=1,2,..

机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识,线性回归因为它的简单,易用,且可以求出闭合解,被广泛地运用在各种机器学习应用中.事实上,除了单独使用,线性回归也是很多其他算法的组成部分.线性回归的缺点也是很明显的,因为线性回归是输入到输出的线性变换,拟合能力有限:另外,线性回归的目标值可以是(?∞,+∞),而有的时候,目标值的范围是[0,1](可以表示概率值),那么就不方便了. 逻辑回归可以说是最为常用的机器学习算法之一,最经典的场景就

机器学习方法(一):线性回归Linear regression

开一个机器学习方法科普系列,也做基础回顾之用.学而时习之. content: linear regression, Ridge, Lasso Logistic Regression, Softmax Kmeans, GMM, EM, Spectral Clustering Dimensionality Reduction: PCA.LDA.Laplacian Eigenmap. LLE. Isomap(修改前面的blog) SVM C3.C4.5 Apriori,FP PageRank minH

Stanford机器学习---第六讲. 怎样选择机器学习方法、系统

原文见http://blog.csdn.net/abcjennifer/article/details/7797502  添加了一些自己的注释和笔记 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Stand

机器学习方法的本质是什么?

机器学习方法本质上是人类认知方式的新世界,是人类的未来. 工业革命解放了人类的体力,以机器学习技术逐步解锁的人工智能革命将解放人类的脑力. 这不是技术层面上的进步,而是从根本上改变人类认知世界的方式. 长久以来,人类对事物的认知经由三个步骤:原始数据——专业知识/经验常识——认知. 这里的原始数据指得是可被人类感知到的一切客观存在之总体,既包括理工范畴内的计量数据,亦包括文史范畴内的事件与现象. 面对同样的原始数据(股市数据,仪表指数,社会现象等),拥有不同知识的人将得出不同的认知:同样,拥有相

如何为你的回归问题选择最合适的机器学习方法?

文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | AI算法之心(公众号ID:AIHeartForYou) 作者 | 何从庆 什么是回归呢?回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系.回归分析在机器学习领域应用非常广泛,例如,商品的销量预测问题,交通流量预测问题.那么,如何为这些回归问题选择最合适的机器学习算法呢?这篇文章将从以下三个方面介绍: 1.常用的回归算法 2.回归竞赛问题以及解决方案 3.